Java 可以在eclipse中模拟平台API来进行Junit测试吗?
我正在开发eclipse插件,需要对其进行一些测试。 我想在我的测试类中监视eclipse运行时平台API。 我的示例中提到的场景很容易理解Java 可以在eclipse中模拟平台API来进行Junit测试吗?,java,eclipse,junit,mockito,platform,Java,Eclipse,Junit,Mockito,Platform,我正在开发eclipse插件,需要对其进行一些测试。 我想在我的测试类中监视eclipse运行时平台API。 我的示例中提到的场景很容易理解 Class MyClass{ private boolean foo(){ if (Platform.inDebugMode()) { return false; } else{ return true; } } } Now I need to test foo() method completl
Class MyClass{
private boolean foo(){
if (Platform.inDebugMode())
{
return false;
}
else{
return true;
}
}
}
Now I need to test foo() method completly
class MyClassTest{
MyClass myClass = new MyClass();
@Test
public void testFoo(){
assertTrue(myClass.foo());
}
@Test
public void testFooWithDebugMode(){
Mockito.doReturn(true).when(Platform).inDebugMode(); // Is this possible to mock this?
assertFalse(myClass.foo());
}
}
是的,可以将平台API模拟到eclipse中进行Junit测试 但在此之前,用户必须安装以下插件
我不知道Eclipse平台,也不知道Eclipse插件开发,但是,不用处理静态,你可以考虑以下内容:
interface MyPlatformAdapter {
boolean isInDebugMode();
}
class MyPlatformAdapaterImpl implements MyPlatformAdapter {
public boolean isInDebugMode() {
return Platform.inDebugMode();
}
}
现在,您的代码变得简单且可进行单元测试:
Class MyClass{
private final MyPlatformAdapter platform;
public MyClass(MyPlatformAdapter platform) {
this.platform = platform;
}
public boolean foo() {
if (platform.isInDebugMode())
{
return false;
}
else{
return true;
}
}
}
而且测试非常简单——不需要像PowerMockito这样的工具,也不需要mockito的静态方法模拟工具
假设您使用这个“平台”,它充满了来自许多类的静态方法,这种方法可以简化测试,并且通常可以使代码变得更好。我有点同意,在你的项目中使用平台的地方越少,这看起来就越过分,但在我看来,这仍然是一种可行的方法。实际问题是什么?您是否了解
Mockito::mockStatic
?不太了解,但我的问题是,我需要在不使用powermockito的情况下模拟静态方法。您阅读了上面的评论吗?阅读《模拟静态》怎么样?