Java 可以在eclipse中模拟平台API来进行Junit测试吗?

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

我正在开发eclipse插件,需要对其进行一些测试。 我想在我的测试类中监视eclipse运行时平台API。 我的示例中提到的场景很容易理解

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测试 但在此之前,用户必须安装以下插件

  • org.eclipse.core.runtime
  • org.eclipse.ui
  • org.eclipse.ui.forms

  • 我不知道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的情况下模拟静态方法。您阅读了上面的评论吗?阅读《模拟静态》怎么样?