使用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中有String()类型的功能吗?我应该使用其他功能吗?

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

b) 最终结果是基于期望值的,所以不应该返回anyString(),而应该返回一些特定的String。因此,您可以验证您的代码对于这个特定的String是否正确运行。也就是说,如果传递的列表中有一个X返回"abc",则断言该表包含一个带有"abc"文本的单元格。

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

您可以模拟对类的任何调用并返回任何值,或者监视现有类并用模拟调用重载调用。

例如

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"。

相关内容

  • 没有找到相关文章

最新更新