【问题标题】:Remove dependencies for Unit tests删除单元测试的依赖项
【发布时间】:2011-11-21 16:55:14
【问题描述】:

我想对我的代码进行单元测试,而不依赖于在我的谷歌应用引擎上启动和运行后端服务。什么是最好的方法来实现这一点,而不必创建我自己的每个类的实现,比如请求工厂等。

这是我的代码。我在运行单元测试时破解了Util 类以返回一个模拟MyRequestFactory 实例。然后这个模拟工厂返回 MyRequest 的模拟实现。
这又具有创建、更新删除等方法的模拟实现。 问题是我有更多的实体需要这样做,并且最终会得到大量的模拟类。

有没有更简单的方法?您认为哪种模拟框架最适合?

MyRequestFactory requestFactory = Util.getRequestFactory(mContext,
                                                         MyRequestFactory.class);

final MyRequest request = requestFactory.myRequest();       

BookProxy bookProxy = request.create(BookProxy.class);
bookProxy.setDescription(bookDescription.getText().toString());
bookProxy.setName(bookName.getText().toString());

Log.i(TAG, "Adding book" + bookProxy.toString());

Request<bookProxy> sendRequest = request.updateBook(bookProxy);

sendRequest.fire();

bookName.setText("");
bookDescription.setText("");

【问题讨论】:

  • 到目前为止,您为哪些事情编写了测试?
  • 我使用 Robolectric 对我的 Activity 实施了一些非常基本的测试。例如,测试当我单击“添加图书”按钮时,新书将发送到服务器并添加到数据库中。为了让我对此进行测试,我使用一个实现来模拟 bookProxy 类,该实现只保留一个本地图书地图并从这个内部地图添加删除等,而不是调用 App 引擎服务。问题是创建模拟所涉及的工作比其他所有工作加起来要多得多。

标签: java unit-testing testing mocking


【解决方案1】:

我更喜欢 Mockito 进行模拟,因为它允许间谍和执行后预期/验证。

另外,Powermock 允许模拟静态方法和调用构造函数等操作。

【讨论】:

  • 感谢您的提示。我已经下载了 Mockito,看起来它可以为我省去很多麻烦。我正在使用 Robolectric 进行单元测试,并读到它预装了 Mockito。有人使用 Robolectric 进行测试吗?
【解决方案2】:

EasyMock 易于使用。但是,如果您发现自己为单元测试实现了太多模拟类,那么这可能表明您的设计存在问题。

【讨论】:

    【解决方案3】:

    JMockit 让我很幸运。我以前尝试过 JMock,虽然它有效,但它有点笨拙。带有 PowerMock 扩展的 Mockito/EasyMock 都易于使用,但它们干扰了我们的代码覆盖工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多