我对Mockito
还不熟悉。我不确定如何测试void函数emitcount()
或实际测试类为100%?
public class Class A {
private static final String APP_NAME = "App name";
public static void main(String[] args) throws Throwable {
String root = "root"
String domain = ".com"
Injector injector = createInjector(
new ClassB(root, domain)
);
ClassC c=injector.getInstance(ClassC.class);
c.start();
}
}
有没有办法Mockito帮助将此代码覆盖到100%?
我的想法:
@RunWith(PowerMockRunner.class)
public class testclass {
@Test
public void test() throws Throwable {
ClassB b = new ClassB(root, domain));
assertNotNull(b);
Injector injector = Guice.createInjector(b);
ClassC c= injector.getInstance(Class C.class);
c.start()
}
}
问题
1)我是否必须使用PowerMock
来测试main函数内的代码?
2)Mockito
是否提供了一些内容以便涵盖所有代码?
3)我必须使用spy()
吗?棘手的部分是创建一个对象
来自注射器
答案 0 :(得分:1)
我不确定如何...实际测试100%的课程?
这里的解决方案是停止考虑无意义的KPI,例如"测试到100%" (100%代码覆盖率)。甚至像Kent Beck这样的核心TDD倡导者也会停止测试他们对所写内容的正确性有信心。
我是否必须使用PowerMock来测试main函数内的代码?
没有
Mockito是否提供了所有代码的内容?
Mockito是一个嘲弄框架。它不是代码覆盖工具。这些是一个独立的知识领域。
我是否必须使用间谍()?棘手的部分是从注射器创建一个物体。
由于您正在学习如何测试以及如何使用Mockito,因此请从简单的示例开始,然后按照自己的方式进行操作。
因为我们正在做OOP,其实质是将我们的工作分成单个责任对象并测试它们之间的协作。在这样做时,作为依赖关系的协作者将在被测系统(SUT)的构造函数中传递。测试时,将依赖项的模拟版本传递给SUT和存根行为,以便实现其功能。这就是Mockito所做的。
研究这一点并熟练掌握它。然后过了一会儿,你会注意到有些类不容易传入模拟。有时这是因为你的课程设计不好。有时,这只是框架本身的一个难点。
您的应用的入口点是后者 - 有一个void main(String args [])
方法,其中依赖关系使用new
关键字进行实例化,然后启动。通过100%的测试覆盖率来获得这个课程几乎没有什么可以获得,所以务实的方法根本就不是测试它。