我想使用PowerMock重写受保护类中的方法,以便我在Android项目上进行一些测试。我相信这是正确的方法,这样我就可以代理我想要代理呼叫的方法。
我的测试生活在被测代码所在的软件包之外。
鉴于课程:FooBar
package com.foo.bar
Class FooBar extends Object {
private void updateSomething(int Param1, String param2 ){
//Do some work....
}
}
我希望有一个模拟的测试用例,以便我可以代理updateSomething方法。
我设想了这样的事情:
package com.example.test
@RunWith(PowerMockRunner.class)
public class TestClass {
@PrepareForTest({com.foo.bar.FooBar.class}) //<---COMPLAINT IS HERE
public void test001_doTest() {
}
}
这里的问题是IDE抱怨FooBar类不公开。
Error:(209, 55) error: FooBar is not public in com.foo.bar; cannot be accessed from outside package.
我认为PowerMock能够免费克服这个问题。 任何建议将不胜感激。
顺便说一句:我意识到我可以在这里使用Reflection。但是,经常调用此方法的情况下,我可以设置测试,然后通过模拟更改我设置的值,从而导致测试错误地(并且间歇性地)失败。在这种情况下,我认为代理类和方法会更好。那应该是Mockito和PowerMock闪耀的地方?
答案 0 :(得分:0)
您所描述的内容暗示您的单元测试错误。
为了隔离单位与其依赖关系,您可以模拟您依赖的对象。
来自那里:鉴于Foo受包保护 - 不可能 你的代码直接引用Foo。因此,您考虑操纵Foo的事实更多地表明您将有问题的设计放在一起。
从这个意义上说:我建议你仔细查看 need 以控制Foo。因为在理智的设计中,您不必担心范围之外的包受保护的类。花时间改进设计;而不是浪费时间来解决破碎设计的效果。