我正在尝试对对象的结构进行单元测试,我正在调用方法getResults()
并且它返回object
的属性,如:
double mathMarks, double scienceMarks, double historyMarks
,现在如何在Junit
类中测试返回对象的结构?
我vo
定义了double mathMarks, double scienceMarks, double historyMarks
,我不知道如何检查测试类中返回对象的结构?有什么建议吗?
答案 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,所以我无法提供任何细节。
为了选择正确的方法,问题是:客户端代码如何访问字段/成员。您的测试应使用相同的方法。