2011-11-21 50 views
2

我想单元测试我的代码,而不依赖后端服务在我的谷歌应用程序引擎上运行并运行。什么是最好的方式来实现这一点,而不必创建我自己的实现像请求工厂等每个类。删除单元测试的依赖关系

这是我的代码。我在运行单元测试时已经攻击了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(""); 
+0

到目前为止你写了什么样的测试? – mikej

+0

我使用Robolectric对我的Activity执行了一些非常基本的测试。例如测试,当我点击“添加书籍”按钮时,一本新书被发送到服务器并添加到数据库中。为了让我测试这个,我嘲笑了bookProxy类,它实现了一个只保留本地地图的实现,并从这个内部地图添加删除等,而不是调用App引擎服务。问题是创建模拟所涉及的工作远远多于其他所有工作。 – MayoMan

回答

2

我更喜欢Mockito嘲笑,因为它允许间谍和执行后期望/验证。

此外,Powermock允许诸如嘲笑静态方法和调用构造函数。

+0

感谢您的提示。我已经下载了Mockito,看起来它会为我节省很多麻烦。我正在使用Robolectric进行单元测试,并且发现它随Mockito预先装入。任何人使用Robolectric进行测试? – MayoMan

2

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

2

我和JMockit有过很多运气。我以前试过JMock,当它工作时,它有点笨重。带有PowerMock扩展的Mockito/EasyMock都易于使用,但它们干扰了我们的代码覆盖工具。

相关问题