我感觉它的设计意图就是为了解决我们有时候测试的时候,测试数据的构造不同,其他的均相同的情况下可能比较有用
参数化测试的编写稍微有点麻烦(当然这是相对于 JUnit 中其它特性而言):
1. 为准备使用参数化测试的测试类指定特殊的运行器 org.junit.runners.Parameterized。
2. 为测试类声明几个变量,分别用于存放期望值和测试所用数据。
3. 为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters 修饰的,
返回值为 java.util.Collection 的公共静态方法,并在此方法中初始化所有需要测试的参数对。
4. 为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
5. 编写测试方法,使用定义的变量作为参数进行测试。
Java代码
import java.util.Collection;
import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class ParameterizedTest {
private String extected;
private String target;
public ParameterizedTest(String target,String extected) {
super();
this.target = target;
this.extected = extected;
}
@Parameters
public static Collection<?> contructData(){
return Arrays.asList(new Object[][]{
{"aaa","AAA"},
{null,null},
{"",""},
{"BBB","BBB"}
});
}
@Parameters
public static Collection<?> contructData1(){
return Arrays.asList(new Object[][]{
{"aaa1","AAA1"},
{null,null},
{"",""},
{"BBB1","BBB1"}
});
}
public String toUpperCase(String str){
if(null == str){
return str;
}
return str.toUpperCase();
}
@Test
public void testUpperCase(){
Assert.assertEquals(extected, toUpperCase(target));
}
}
同时,感觉这个地方实现的不好的地方就是整个类只有第一个标有@Parameters的static静态方法起作用,也就
限制了它的灵活使用。随便看下它里面对注解的处理部分
List<FrameworkMethod> methods= testClass
Java代码
.getAnnotatedMethods(Parameters.class);
or (FrameworkMethod each : methods) {
int modifiers= each.getMethod().getModifiers();
if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
return each;
实际上它是找到第一个就返回了,其实我们如果为了灵活的话,可以再标注下,然后去找一个特殊的方法,然后多个方法的parametrized的测试就可以放到一个类里面了。当然这么做的话,肯定有有一些其他的不好的地方。
分享到:
相关推荐
JUnit 4 是一款广泛应用于Java开发中的单元测试框架,它极大地简化了测试代码的编写和执行。作为Java事实上的标准单元测试库,JUnit 4 的易用性和灵活性使其成为开发者首选的测试工具。本文将深入讲解JUnit 4的关键...
在实际应用中,JUnit4支持参数化测试,允许测试用例接收不同参数并进行多次执行,这样可以测试多种情况。另外,还有`@Ignore`注解可以暂时跳过某个测试,`@BeforeClass`和`@AfterClass`注解用于在整个测试类开始前和...
在当今数字化时代,软件产品的质量直接关系到用户体验和企业信誉。因此,软件测试作为保障软件质量的关键环节,其重要性不言而喻。本文档将详细介绍软件测试实训报告的编写,包括对白盒测试与黑盒测试的深入探讨,这...
自动化测试还涉及到测试用例的设计,这包括编写详细的测试步骤、定义预期结果和设置断言来检查实际结果。为了保证覆盖率,需要覆盖各种正常和异常情况,例如无效的请求参数、网络故障或服务器错误。测试数据管理也是...
### Android自动化测试:常见方法与adb shell操作详解 在移动应用开发过程中,自动化测试是确保应用质量的关键步骤之一。特别是对于Android平台来说,利用各种工具和技术进行自动化测试可以帮助开发者更高效地发现...
测试程序使用Junit框架,实现了测试用例的自动化执行。 因此,本报告为软件测试和质量管理领域的学生和开发者提供了一个有价值的参考资料,可以帮助他们更好地理解软件测试的原理和方法。 在软件测试和质量管理...
在JUnit测试部分,学生需要编写Java类来调用`DoWork`方法,并利用JUnit框架编写测试代码,以自动化执行上述测试用例并验证输出是否符合预期。例如,对于P1,预期输出为{k=23,j=1},而P4则期望输出{k=0,j=0}。通过...
JUnit 4.0引入了许多改进,比如注解、参数化测试和测试套件等,使得测试代码更加简洁和易读。在Selenium项目中,你可以为每个功能或页面创建一个JUnit测试类,每个测试方法对应一个具体的测试场景。 在使用这些jar...
2. **测试脚本**:如果“Test”包含了代码文件,那可能就是自动化测试脚本。常见的脚本语言有Python、JUnit(Java)、Selenium等,它们能帮助快速执行重复性的测试任务,并提供详细的测试报告。 3. **配置文件**:...
4. **自动化测试**:通过Groovy脚本支持,可以编写自定义的测试逻辑,实现测试脚本化,提高测试效率,同时支持JUnit和TestNG等第三方测试框架集成。 5. **安全测试**:提供安全测试功能,如WS-Security、OAuth、...
此外,持续集成/持续部署(CI/CD)工具如Jenkins、Travis CI或CircleCI可以自动化测试流程,确保每次代码提交后都能快速获得反馈。 总的来说,"Test_测试代码_4321_"的项目可能涉及到了软件开发中的多个方面,包括...
总之,xj4是JUnit 4的一个强大补充,它通过自定义运行器和灵活的参数化测试提高了测试的效率和可读性,同时作为开源软件,xj4也鼓励了社区的协作和改进。如果你正在使用JUnit 4进行测试工作,并且面临一些复杂的测试...
Jupiter 提供了许多增强的功能,如测试注解(@Test、@BeforeEach、@AfterEach 等)、条件测试(@Disabled、@Tag)、参数化测试和异步测试等。这些特性可以帮助你编写更加灵活、可维护的测试代码。 总结来说,...
TestNG是一款功能强大的Java测试框架,它以JUnit和NUnit为灵感来源,但引入了许多增强功能,使得自动化测试更加高效和灵活。TestNG的主要目标是支持所有类型的测试场景,包括功能测试、单元测试、集成测试以及压力...
除了基本的断言和测试管理,Unittest还提供了诸如参数化测试(`@parameterized.expand`)、超时测试(`@unittest.expectedFailure`)、跳过测试(`@unittest.skip`)等高级特性,使得测试更加灵活和强大。...
此外,还需要考虑SQL注入、XSS攻击等安全问题,通过参数化查询、输入验证等方式提高安全性。 10. **测试与调试**:单元测试和集成测试是确保代码质量的重要环节,JUnit或TestNG可能被用来编写测试用例。IDE如...