如何从方法调用单元测试返回对象的结构?

时间:2011-08-02 15:16:53

标签: java unit-testing junit

我正在尝试对对象的结构进行单元测试,我正在调用方法getResults()并且它返回object的属性,如:

double mathMarks, double scienceMarks, double historyMarks,现在如何在Junit类中测试返回对象的结构?

vo定义了double mathMarks, double scienceMarks, double historyMarks,我不知道如何检查测试类中返回对象的结构?有什么建议吗?

3 个答案:

答案 0 :(得分:2)

由于java是强类型的,而不是动态语言,因此不需要这种类型的测试。你应该有某种ResultClass,它有自己的测试,所以这个类的结构是为你隐式测试的。

如果您的方法可以返回子类,则可以根据输入测试返回的类是正确的类型,但是这些子类应该有自己的单元测试来验证它们的结构功能。

另请注意,如果结果类具有类似getScienceMarks的方法,则应根据返回结果的方法的输入验证返回的值是否正确。在这里,您要确保您正在测试的课程正常运行。它隐式验证结果类的结构;即它有适当的方法。

答案 1 :(得分:1)

如果我理解你的问题,请使用Hamcrest:

MyPojo pojo = ...getResults();
assertThat(pojo, allOf(
    hasProperty("mathMarks", equalTo(123),
    hasProperty("scienceMarks", equalTo(321),
    ...));

hasProperty匹配器验证给定对象是否具有给定值的特定JavaBean属性(值匹配器是可选的)。

答案 2 :(得分:0)

在Java中,您通常会有一个接口或一个指定所需成员的公共超类。然后,您可以使用assertTrue(a instanceof SomeClass)进行测试请注意,即使返回的对象具有所需的成员但未实现/扩展SomeClass,此测试也会失败。

如果您希望/必须使用字段,您可以使用反射来检查字段的存在和类型。

第三种选择是使用像groovy这样的语言进行测试。它允许您编写访问代码的代码,无论它们是否实际存在。至少我认为这应该是可能的,但由于我从未真正使用过groovy,所以我无法提供任何细节。

为了选择正确的方法,问题是:客户端代码如何访问字段/成员。您的测试应使用相同的方法。