在方法的中间我正在做这样的事情
JSONObject = new JSONObject(json);
现在我正在尝试使用Android Studio
和JUnit
进行单元测试。不幸的是,Android Studio不会让我创建一个真实的JSONObject
实例并让我模仿它。
保留代码并进行单元测试的最简单方法是什么?
Mockito
不会帮助我,因为它无法模拟构造函数,但似乎PowerMock
是可行的方法。
答案 0 :(得分:5)
我终于使用了Roboelectric。它允许您运行模拟真实设备条件的测试。这使得模拟框架类没有必要。
只需要将roboelectric
引用添加到gradle并使用@RunWith(RobolectricTestRunner.class)
答案 1 :(得分:1)
您可以使用简单代码
创建模拟JSONObjectJSONObject mock = Mockito.mock(JSONObject.class);
然后你可以轻松地模拟它的方法,比如字段getter,以便能够从JSONObject返回你想要的任何内容。
如果问题是这个JSONObject是在long函数的中间创建的,那么你可以将JSONObject创建提取给协作者,然后模拟协作者。
MyClass {
MyClass(JSONObjectCreator creator) {
this.creator = creator;
}
public void doesSomethingWithJSON(String input) {
//...
JSONObject jsonObject = creator.createJSONObject(input);
//...
}
}
JSONCreator {
public JSONObject createJSONObject(String input) {
return new JSONObject(input);
}
}
在测试中,您将创建一个模拟JSONObject,以及一个带有模拟JSONObjectCreator的新MyClass。模拟的JSONObjectCreator将返回模拟JSONObject。
答案 2 :(得分:0)
如果您使用 Kotlin 和 Mockk 库
private val json: JSONObject = mockk(relaxed = true)