实验二中JUnit单元测试的小知识

本来想先写个讲义的自我总结,毕竟可变与强弱讲了不少相对具体的东西,比较好记

不过实验二为了测试类的private属性,要找合适的方法是真的麻烦,所以还是先把这个记下来吧

这个方法是用资源管理器的反射机制,需要import java.lang.reflect.*;

private属性:

class Edge {
    private String source;//各private属性
    private String target;
    private int weight;
}  
@Test
public void testSetSource() throws IllegalArgumentException, IllegalAccessException {
    	Graph<String> graph = emptyInstance();
    	Field [] fa = Edge.class.getDeclaredFields();//利用反射得到了所有变量的元数据组
    	for(Field f :fa){
      		if(f.getName().equals("source")){
   	  			f.setAccessible(true);//改变访问属性,绕过权限检测   
   	  			Edge t = new Edge();
   	  			t.setSource("A");
   	  			String prs = (String) f.get(t);//从实例中提取field的内容
   	  			System.out.println(prs);    
   	  		}
   	  	}
    }

还有关于private方法的,虽然感觉用不到也没仔细看,但还是放着吧:

@Test
public void TestGetPM() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
	Method [] ma = TestClass.class.getDeclaredMethods();
	for(Method m :ma){
		if(m.getName().equals("getName")){
			m.setAccessible(true);
			TestClass t = new TestClass();
			Object [] prams  ={"Lucas"};
			String s =(String)m.invoke(t,prams);
			System.out.println(s);
		}
	}
}

还有他用来举例的类:

public class TestClass {
    	 public  String pus = "This is a public String";
    	 private String prs = "This is a private String";
    	 
    	 public String getPublicString(){
    		 return pus;
    	 }
    	 
    	 private String getPrivateString(){
    		 return prs;
    	 }
    	 private String getName(String Name){
    		 return "Your name is "+Name;
    	 } 
    }

顺便再把第一次实验的抛出异常的检测也贴上来吧

这是@Test里的相关代码:

@Test
public void testAddVertex() {
	FriendshipGraph graph=new FriendshipGraph();
	Person a=new Person("A");
	Person d=new Person("A");
	graph.addVertex(a);
	expectedEx.expect(RuntimeException.class);
	expectedEx.expectMessage("The name 'A' has appeared.");
	graph.addVertex(d);
}

嗯,还要配合这个操作一起食用:

@Rule
	public ExpectedException expectedEx=ExpectedException.none();

原操作:

	public void addVertex(Person n) {
		for(Person v:vertex) {
			if(n.name.equals(v.name)) {
				throw new RuntimeException("The name '"+n.name+"' has appeared.");
			}
		}
		vertex.add(n);
	}


关于privat的属性和方法,来自博客:http://blog.sina.com.cn/s/blog_654c6ec70100qyek.html

异常的是百度来的,不记得具体是哪个博客了……或许不贴更合适点?

《Java程序设计》课程实验指导书程序代码(答案)(实验),个人原创,仅供参考与交流。 希望多多交流,共同进步! 实验 Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。(闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.编写Java Appet 程序打印 “水仙花” 数 (它的个、十、百位数字的立方的和等于该数本身,如:153=1^3+5^3+3^3) 3. 编写Java Application程序,分别用do-while和for循环计算1+1/2!+1/3!+1/4!...的前20项和 三、实验要求: 1. 正确使用Java语言的选择语句,循环语句; 2. 调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[ ] args)方法中加入实现要求功能的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第题)编写Java Applet, 在public void paint(Graphics g)方法中加入实现要求功能的代码, 主要步骤是:从100到1000循环,判断每个数是否符合水仙花数的特点,是则输出之。 3.编译运行程序,观察输出结果是否正确。 五、自做实验 1. 输出100以内的所有素数。 提示: 逐个判断小于a的每个正整数x,第重循环针对x,判断其是否是质数。 2.将所输入之正整数,以、八、十六进制表示出来。 提示: 可写三个方法分别计算输出、八、十六进制表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值