单元测试返回非平凡对象的方法

5 unit-testing

如何测试返回不允许访问其字段的复杂对象的方法.考虑一下这个片段 -

public ResultState getResultState(){ 
  ResultState resultState = new ResultState();
  // logic //
  this.resultState = resultState; //set parent class field
  return resultState;
}
Run Code Online (Sandbox Code Playgroud)

ResultState是一个不允许其大部分方法和字段的对象.我不知道如何测试除了以下方法之外的其他方法:

assertNotNull(object.getResultState()) //the return ResultState is used by other class methods
Run Code Online (Sandbox Code Playgroud)

我的问题很笼统,但我希望它能说明我是多么绝望地想要如何进行测试...感谢您的帮助

Jon*_*eet 11

那么,结果有什么重要意义呢?据推测它可以做某事或者它将是一个无用的结果.在这种情况下,将工作代码与损坏代码区分开来的是什么?

(我不是要试图解决这个问题 - 有时真的很难保持紧密的封装,但要有效地测试.有时值得开放一个对象以使测试更容易......)


Bri*_*new 5

这个对象做了什么?如果你不能查询字段等,我猜它会对你传入的某个对象起作用吗?如果是这种情况,你可以传入一个实现相同接口的虚拟对象,但检查结果对象是否使用适当的参数,按预期的顺序等调用它?

例如

public class ResultObject {
   public void actOn(ActedUpon obj) {
      // does stuff
Run Code Online (Sandbox Code Playgroud)

ActedUpon接口在哪里,并且具有'正常'实现,并且验证实现(使用像JMock这样的模拟框架在这里是理想的)