具有私有字段的void方法的单元测试 - 线覆盖

时间:2017-07-03 14:37:23

标签: java junit code-coverage easymock

我在void

中的ClassUnderTest方法中有以下代码
public void doSomething(){

    A a = new A();
    a.setAb("b");
    a.setAc("c");

    persistantObject.commitObj(a);
}

我知道如何编写传递的JUnit,但是,我无法弄清楚如何获得100%的线覆盖率。

我试过以下

@Mock
private PersistantObject mockPersistantObject;
public void testDoSomething(){

    EasyMock.createMock(this);
    ClassUnderTest classUnderTest = new ClassUnderTest();
    ReflectionTestUtils.setField(classUnderTest, "persistantObject", mockPersistantObject);

    A a = new A();
    a.setAb("b");
    a.setAc("c");

    mockPersistantObject.commitObj(a);
    EasyMock.expectLastCall();

    EasyMock.replay(this);
    classUnderTest.doSomething();
    ...
    EasyMock.verify(this);
}

1 个答案:

答案 0 :(得分:0)

单元测试关于的覆盖范围。

UnitTesting是关于要求的覆盖范围。

线路覆盖只是一种工具,可以了解已经实施了多少要求

因此,不要过多关注测试所涵盖的LoC,而是在需求中寻找行为,这需要某种行为你的切割并检查是否覆盖了测试。

此外,UnitTests不关心LoC的另一个原因:在重构和演变应用程序期间,LoC可能会发生变化。因此,您为增加线路覆盖范围所做的任何努力都将导致破坏测试或阻止所需的更改(取决于您对测试和/或技能的信心)。但是,如果行为发生变化,则单元测试应该失败,而不是实现它的代码。