Mockito单元测试类中的主要功能

时间:2017-09-04 11:58:38

标签: unit-testing mockito junit4 powermock powermockito

我对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()吗?棘手的部分是创建一个对象    来自注射器

1 个答案:

答案 0 :(得分:1)

  

我不确定如何...实际测试100%的课程?

这里的解决方案是停止考虑无意义的KPI,例如"测试到100%" (100%代码覆盖率)。甚至像Kent Beck这样的核心TDD倡导者也会停止测试他们对所写内容的正确性有信心。

  

我是否必须使用PowerMock来测试main函数内的代码?

没有

  

Mockito是否提供了所有代码的内容?

Mockito是一个嘲弄框架。它不是代码覆盖工具。这些是一个独立的知识领域。

  

我是否必须使用间谍()?棘手的部分是从注射器创建一个物体。

由于您正在学习如何测试以及如何使用Mockito,因此请从简单的示例开始,然后按照自己的方式进行操作。

因为我们正在做OOP,其实质是将我们的工作分成单个责任对象并测试它们之间的协作。在这样做时,作为依赖关系的协作者将在被测系统(SUT)的构造函数中传递。测试时,将依赖项的模拟版本传递给SUT和存根行为,以便实现其功能。这就是Mockito所做的。

研究这一点并熟练掌握它。然后过了一会儿,你会注意到有些类不容易传入模拟。有时这是因为你的课程设计不好。有时,这只是框架本身的一个难点。

您的应用的入口点是后者 - 有一个void main(String args [])方法,其中依赖关系使用new关键字进行实例化,然后启动。通过100%的测试覆盖率来获得这个课程几乎没有什么可以获得,所以务实的方法根本就不是测试它。