TestNG官方网站:
http://testng.org/doc/documentation-main.html
官方文档:
5.8 - Factories
Factories allow you to create tests dynamically. For example, imagine you want to create a test method that will access a page on a Web site several times, and you want to invoke it with different values:
TestWebServer.java
public class TestWebServer {
|
@Test (parameters = {
"number-of-times" })
|
public void accessPage( int numberOfTimes) {
|
while (numberOfTimes-- >
0 ) {
|
testng.xml
<parameter name= "number-of-times" value= "10" />
|
< class name= "TestWebServer" />
|
<parameter name= "number-of-times" value= "20" />
|
< class name= "TestWebServer" />
|
<parameter name= "number-of-times" value= "30" />
|
< class name= "TestWebServer" />
|
This can become quickly impossible to manage, so instead, you should use a factory:
WebTestFactory.java
public class WebTestFactory {
|
public Object[] createInstances() {
|
Object[] result = new Object[ 10 ];
|
for ( int i = 0 ; i < 10 ; i++) {
|
result[i] = new WebTest(i * 10 );
|
and the new test class is now:
WebTest.java
private int m_numberOfTimes;
|
public WebTest( int numberOfTimes) {
|
m_numberOfTimes = numberOfTimes;
|
public void testServer() {
|
for ( int i = 0 ; i < m_numberOfTimes; i++) {
|
Your testng.xml only needs to reference the class that contains the factory method, since the test instances themselves will be created at runtime:
< class name= "WebTestFactory" />
|
The factory method can receive parameters just like @Test and @Before/After and it must return Object[]. The objects returned can be of any class (not necessarily the same class as the factory class) and they don't even need to contain TestNG annotations (in which case they will be ignored by TestNG).
Factories can also be used with data providers, and you can leverage this functionality by putting the @Factory annotation either on a regular method or on a constructor. Here is an example of a constructor factory:
@Factory (dataProvider = "dp" )
|
public FactoryDataProviderSampleTest( int n) {
|
static public Object[][] dp() {
|
The example will make TestNG create two test classes, on with the constructor invoked with the value 41 and the other with 42.
如果一个测试类的很多方法需要测试,而且这个测试类需要多次测试那么需要使用测试工厂最好。
package com.easyway.testng;
import org.testng.annotations.Test;
/**
* @author longgangbai
* 2013-11-19 下午3:02:43
*
*/
public class WebTest {
private int m_numberOfTimes;
public WebTest(int numberOfTimes) {
m_numberOfTimes = numberOfTimes;
}
@Test
public void testServer() {
for (int i = 0; i < m_numberOfTimes; i++) {
}
}
}
制定测试类运行10次:
package com.easyway.testng;
import org.testng.annotations.Factory;
/**
* @author longgangbai
* 2013-11-19 下午3:02:21
*
*/
public class WebTestFactory {
@Factory
public Object[] createInstances() {
Object[] result = new Object[10];
for (int i = 0; i < 10; i++) {
result[i] = new WebTest(i * 10);
}
return result;
}
}
如果想通过配置制定测试类运行10次:
可以将测试工厂类改写为:
package com.easyway.testng;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Factory;
/**
* @author longgangbai
* 2013-11-19 下午3:04:41
*
*/
public class WebTestConstructFactory {
@Factory(dataProvider = "dp")
public Object[] createFactory(int n) {
Object[] result = new Object[n];
for (int i = 0; i < n; i++) {
result[i] = new WebTest(i * n);
}
return result;
}
@DataProvider(name = "dp" ,parallel=true)
static public Object[][] dp() {
return new Object[][] {
new Object[] { 41 },
new Object[] { 42 },
};
}
}
相关推荐
13. **单元测试**:学习JUnit或TestNG等单元测试框架,编写测试用例,确保代码的质量和稳定性。 清华大学的Java教程会深入讲解这些知识点,并通过实例和练习帮助学习者巩固理解。注释丰富的代码示例有助于读者更好...
10. **测试**:单元测试(JUnit)、集成测试(TestNG)和Mockito等工具的使用,确保代码质量并简化调试过程。 11. **Javadoc与源码阅读**:学习编写清晰的Javadoc注释,以及如何阅读和理解开源库的源码,对于成为...
8. **单元测试**:Java中的JUnit或TestNG可能被用来编写测试用例,确保代码的正确性。学习者可以学习如何编写和执行单元测试,理解测试驱动开发(TDD)的重要性。 9. **设计模式**:项目可能运用了多种设计模式,如...
- 写单元测试来验证代码功能,使用JUnit或TestNG框架。 - 测试覆盖率应尽可能高,确保代码质量。 通过遵循这些编码规范,可以提升代码的整体质量,使得代码更易于阅读、理解和维护。在实际开发中,团队应制定统一...
- 使用JUnit或TestNG等测试框架进行自动化测试。 10. **持续集成和代码审查** - 实施持续集成(CI),确保代码质量并及时发现潜在问题。 - 进行代码审查,团队成员互相检查代码,共同提高代码质量。 以上就是Java...
14. **单元测试**:使用JUnit或TestNG编写单元测试,确保代码功能正确,并为持续集成打下基础。 15. **代码重构**:定期进行代码重构,提高代码的可读性和可维护性,遵循SOLID原则。 以上只是Java开发中的一些基本...
13. **单元测试**:编写单元测试用例来验证代码功能,使用JUnit或TestNG等工具。 14. **代码审查**:定期进行代码审查,确保遵循编码规范,并发现潜在的错误和改进点。 15. **持续集成/持续部署(CI/CD)**:利用...
- 使用JUnit或TestNG等测试框架进行测试。 8. **版本控制** - 使用Git进行版本控制,遵循提交和合并的最佳实践。 - 编写有意义的提交信息,保持代码历史清晰。 9. **持续集成/持续部署(CI/CD)** - 配置自动化...
此外,商业项目源码还可能涉及到权限控制(如Spring Security)、用户认证(OAuth2)、日志记录(Log4j或Logback)、单元测试(JUnit或TestNG)、任务调度(Quartz或Spring Task)等常见的企业级功能。这些组件和...
8. **单元测试与持续集成**:如果项目包含测试代码,那么你可以学习如何使用JUnit或TestNG进行单元测试,以及如何配置Maven或Gradle进行持续集成,这些都是现代开发流程的重要组成部分。 9. **版本控制与协作**:...
- 使用JUnit或TestNG等工具进行测试,遵循 Arrange-Act-Assert 结构。 10. **代码审查**: - 定期进行代码审查,发现潜在问题,提升代码质量。 - 使用代码质量管理工具,如SonarQube,进行自动化检查。 以上仅...
10. **单元测试**:强调编写单元测试的重要性,使用JUnit或TestNG等工具,确保代码覆盖率,遵循TDD(测试驱动开发)原则。 11. **持续集成与版本控制**:推荐使用Git进行版本控制,采用持续集成工具如Jenkins,确保...
- 测试方法:使用JUnit或TestNG等测试框架,编写可读性强、易于维护的测试用例。 - 测试驱动开发:提倡TDD(Test-Driven Development),先写测试后写实现。 7. **其他** - SQL优化:编写高效的SQL语句,避免全...
JMock可以与多种测试框架集成,如JUnit、TestNG等,也可以与其他模拟库如EasyMock、Mockito配合使用,以满足不同测试需求。 总之,JMock是Java开发者进行单元测试的重要工具,它通过提供模拟和预期机制,帮助确保...
- 编写单元测试,确保代码的功能正确,如使用JUnit或TestNG框架。 - 测试覆盖率应尽可能高,涵盖各种边界条件和异常情况。 13. **持续集成与自动化** - 使用持续集成工具(如Jenkins、Travis CI)自动构建和测试...
Junit或TestNG等测试框架的使用将帮助开发者进行这些测试。此外,日志记录(Logging)框架如Log4j或java.util.logging可能被用来记录运行时信息,方便调试。 7. **错误处理和异常处理**:源码中应有适当的错误处理...
在测试方面,手册强调单元测试的重要性,推荐使用Mockito等工具进行模拟测试,以及JUnit和TestNG作为测试框架。同时,提倡编写可测试的代码,避免依赖全局状态和静态方法。 最后,手册还涉及了代码审查和持续集成的...
5. **单元测试**:在Java开发中,JUnit或TestNG通常用于编写单元测试,确保每个模块的功能正确。测试用例和测试报告也应作为文档的一部分。 6. **集成测试与系统测试**:描述如何将各个组件整合并进行系统级别的...
JUnit或TestNG可能是项目中使用的测试框架,通过测试用例覆盖功能点,确保软件功能的可靠性。 8. **版本控制**:开源项目通常使用Git进行版本控制,因此,通过查看项目历史,开发者可以了解如何利用Git进行协同开发...
9. **单元测试**:强调编写高质量的单元测试,使用JUnit或TestNG,遵循测试驱动开发(TDD)原则。 10. **性能优化**:包含内存优化、CPU优化、GC调优等方面,如避免大对象、减少对象创建、合理设置JVM参数等。 11. *...