测试类中的函数,它使用Mockito在构造函数中使用字符串

时间:2014-10-16 18:06:24

标签: java unit-testing mockito

我有以下课程并想为它编写单元测试。以下是完整参考的课程。 X是POJO

public class StatusTable {
    private P tableData;
    private Q tableDefinition;

    public StatusTable(final List<X> xList,
        final A a,
        final B b)
        throws URISyntaxException {
        setTableDefinition(a, b);
        setTableData(xList, b, a);
    }


    private void setTableDefinition(final A a,
        final B b) {
        //some code
    }

    public void setTableData(final List<X> xList,
            final B b, final A a)
        throws URISyntaxException {
        for (X sfm : xList) {
            //some code
        }
    }
}

作为单元测试的新手,我对如何测试的想法很少,但这是一个想法。如果不正确,请纠正我。

public class StatusTableTest {

private StatusTable statusTable;
@Mock
private A mockA;
@Mock
private B mockB;
@Mock
private X mockX;

    public void setUp() {
        stub(mockX.getSomeValue()).toReturn(?);   //want to return any string
        stub(mockX.getSomeAnotherValue()).toReturn(?);   //want to return any integer
        //Similarly mock other functions retuning 
        this.statusTable = new StatusTable(xList, mockA, mockB,);
    }

    public void setTableDefinitionTest() {
        //test the code
    }
}

我有些疑惑:

a)我做得对吗? X应该被嘲笑吗?

b)Mockito中是否存在anyString()类型的功能,还是应该使用其他功能?

2 个答案:

答案 0 :(得分:0)

a)没有实际代码很难分辨。您可以模拟单个X值或整个X列表。

b)您的最终结果基于预期值,因此您不应该返回anyString(),而是返回一些特定的String。因此,您可以验证您的代码对此特定String的行为是否正确。即断言该表包含单个单元格&#34; abc&#34;文本如果传递列表,其中一个X返回&#34; abc&#34;。

答案 1 :(得分:0)

取决于您想要模拟的内容。

你可以模拟对你的类的任何调用,并返回任何值或间谍现有的类,并通过模拟调用重载调用。

例如

mockedX = Mockito.mock(X.class);

Mockito.when(mockedX.someFunction("1")).thenReturn(someAnswer);

或:

X x = new X();
spiedX = Mockito.spy(x);

Mockito.answer(some answer).when(spiedX).someFunction("1");

请记住......模拟的类会返回你正在嘲笑的东西。

如果您创建这样的模拟:

Mockito.when(mockedX.someFunction(Mockito.anyString())).thenReturn("A");

然后在每次调用时,someFunction()将返回“A”。