当junit进行单元测试时,遇到没有返回值的方法,怎么办?
实例
package com.src.unittest; public class unittest { private static String stringtest; public void setvalue(String temp){ stringtest=temp+"123"; //get value: stringtest } public String getvalue(){ //return the stringtest value for unit test return stringtest; } }
如果需要进行测试的方法没有返回值,那么这个方法一定会对某个对象做一些操作,比如改变某个属性、变量的值等,否则这这个方法就什么都没做,这是没有任何意义的
对于没有返回值的方法,在进行测试时可以对可观测到的变动进行测试,即要测试它的行为。不同方法有不同的测试策略,具体视情况而定
具体来说,上面所举的例子中,要测试setValue()方法,这个方法的行为我们可以理解为改变了stringtest 的值,我们就可以对stringtest的值进行验证
测试用例可以这样写
import static org.junit.Assert.*; import org.junit.Test; import com.beyondsoft.UnitTest; public class TestUnitTest { UnitTest tStr = new UnitTest(); @Test public void testSetvalue() { tStr.setvalue("123"); assertEquals("123123", tStr.stringtest); } }
但是,由于 privatestatic String stringtest; 中stringtest作用域的问题致使不能在测试case中直接调用stringtest
两种解决办法:
1、先将作用域private更改为可测试的范围,如public,验证该方法功能没有问题之后,一定要记得将作用域改回来,但是,这样的话就修改了源代码,这不是最合理的方式
2、使用java反射机制获取stringtest值,进行测试(同样的,私有方法的测试也可以使用反射机制进行测试)
具体实现:
import static org.junit.Assert.*; import java.lang.reflect.Field; import org.junit.Test; import com.beyondsoft.UnitTest; public class TestUnitTest { UnitTest tStr = new UnitTest(); @Test public void testSetvalue(){ Class t = UnitTest.class; Field field; try { field = t.getDeclaredField("stringtest"); field.setAccessible(true); //设置为true,无视java的封装 tStr.setvalue("123"); assertEquals("123123", field.get(t.newInstance())); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException | InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
私有方法测试,反射机制的使用:
Method method = targetClass.getDeclaredMethod("方法名", 方法参数类); method.setAccessible(true);return method.invoke(类的实例, 方法参数值); Field field = targetClass.getDeclaredField("私有变量名");field.setAccessible(true); field.set(类的实例, 私有变量值);
相关推荐
因此我们要使用junit测试void方法,必须找到一个有实际返回值的方法来暂时替代void方法,但此方法只作为被测void方法的入口和出口,测试程序所调用的仍旧是原void方法。为了实现这种测试方式,我们按照如下步骤进行...
Junit 通常用于那些有明确返回值的方法的测试...因此我们要使用junit测试void方法,必须找到一个有实际返回值的 方法来暂时替代void方法,但此方法只作为被测void方法的入口和出口,测试程序所调用的仍旧是原void方法。
junit测试 test txt file
junit测试工具以及其安装方法。junit.rar/
单元测试框架Junit—— JUnit3.8.1 以及使用JUnit测试的代码demo。
软件测试JUnit测试框架的使用实验1报告
Junit,测试Junit,测试案例使用
junit测试测试junit测试测试junit测试测试junit测试测试
3 Junit单元测试框架的作用以及好处. 用来对类中的方法功能进行有目的的测试,以保证程序的正确性和稳定性。 能够让方法独立运行起来。 好处: 可以书写一系列的测试方法,对项目所有的接口或者方法进行单元测试。 ...
单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。
测试有无返回值利用 junit 测试单元 【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【【
在Eclipse中使用JUnit4进行单元测试!
通过单元测试工具(Junit)支持,使学生对单元测试中测试用例的设计原则,设计方法进行了解和掌握。
软件测试报告Junit的单元测试,框架的使用情况,适合正在学习的同学!
单元测试之道Java版——使用Junit,不错的学习测试的教材
junit3 junit4 api,单元测试的利器
《单元测试之道Java版:使用JUnit》PDF 下载
应用JUnit实施单元测试 JUnit的框架原理分析 JUnit主要用于单元测试,所谓的单元测试就是常常说的白盒测试
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
如何使用JUnit写测试 如何使用JUnit写测试