Multithreading 在测试自动化项目中使用单例控制器的优缺点是什么
我正在创建一个测试自动化项目,希望它能被TESTNG使用。我计划在自动化项目中使用MVC架构,并考虑创建控制器单例。因此,您想知道它的优缺点,因为它将被支持多线程的TESTNG访问/使用。在测试自动化中,或者通常您应该避免使用单线程。 特别是在java中,通常不能为新的测试用例重置单例。 这导致了新的tets案例使用singelton的假设,singelton的结果来自于前一个案例。这太糟糕了Multithreading 在测试自动化项目中使用单例控制器的优缺点是什么,multithreading,thread-safety,testng,Multithreading,Thread Safety,Testng,我正在创建一个测试自动化项目,希望它能被TESTNG使用。我计划在自动化项目中使用MVC架构,并考虑创建控制器单例。因此,您想知道它的优缺点,因为它将被支持多线程的TESTNG访问/使用。在测试自动化中,或者通常您应该避免使用单线程。 特别是在java中,通常不能为新的测试用例重置单例。 这导致了新的tets案例使用singelton的假设,singelton的结果来自于前一个案例。这太糟糕了 您可以创建特殊的Singleton,其具有resetSingleton()或setInstance()
您可以创建特殊的Singleton,其具有resetSingleton()或setInstance()方法,这些方法仅用于测试用例。
此外,您还可以通过反射来设置Singleton。我已经完成了所有3种工艺,但是:
最好的办法是完全避免使用单粒子。我不能具体评论测试ng,但我可以推荐这篇有趣的文档。特别是它有一个关于单身的章节。以下是一些摘录:
- 使用全局状态的每个测试都需要在预期状态下启动,否则测试将失败。但在之前的测试中,另一个对象可能已经改变了该全局状态
- 全局状态通常会阻止测试并行运行,这会迫使测试套件运行较慢
- 单例强制执行自己的“单例性”最终会导致作弊:在所谓的单例上,您经常会看到诸如reset()或setForTest()之类的mutator方法,因为您需要在测试期间更改实例。如果在测试后忘记重置单例,以后的使用将使用过时的底层实例,并且可能会以难以调试的方式失败
public void someMethod() {
Controller c = Controller.getInstance();
c.doSomething();
}
赞成:
public void someMethod(Controller c) {
c.doSomething();
}
共享PDF是一个真正的指南!!