Java JMockit:如何将模型类注入到测试类中?

Java JMockit:如何将模型类注入到测试类中?,java,unit-testing,junit,dependency-injection,jmockit,Java,Unit Testing,Junit,Dependency Injection,Jmockit,我是JMockIt的新手,正在试图弄清楚/理解如何将@Injectable用于我已经定义的顶级模型类 例如: // JUnit Test Class public class RepositoryTest { @Tested private Repository repository; @Injectable private ResultsAPIWrapper resultsApiWrapper; @Test public void testRepo(){

我是JMockIt的新手,正在试图弄清楚/理解如何将
@Injectable
用于我已经定义的顶级模型类

例如:

// JUnit Test Class
public class RepositoryTest {

    @Tested private Repository repository;
    @Injectable private ResultsAPIWrapper resultsApiWrapper;

    @Test
    public void testRepo(){
        new ResultsApiWrapper();
        assertThat(repository.doSomething(), is("done" ) );
    }
}


// Class under test
public class Repository{

   @Autowired private ResultsAPIWrapper resultsApiWrapper;

   public String doSomething(){
      return resultsApiWrapper.load();
   }
}

// Mocked implementation of the ResultsAPIWrapper that I want injected into Repository
public class ResultsApiWrapperMock extends MockUp<ResultsAPIWrapper>{
   @Mock
   public String load(){
      return "done";
   }
}
//JUnit测试类
公共类存储测试{
@测试专用存储库;
@可注入私有ResultsAPIWrapper ResultsAPIWrapper;
@试验
公开无效测试报告(){
新的ResultsApiWrapper();
断言(repository.doSomething(),是(“完成”);
}
}
//正在测试的类
公共类存储库{
@自动连线专用ResultsAPIWrapper ResultsAPIWrapper;
公共字符串doSomething(){
返回resultsApiWrapper.load();
}
}
//我想要注入到存储库中的ResultsAPIWrapper的模拟实现
公共类ResultsApiWrapperMock扩展了实体模型{
@嘲弄
公共字符串加载(){
返回“完成”;
}
}
如果我尝试上面的方法,我会得到一个错误

java.lang.IllegalArgumentException: Class already mocked: com.fw.wrappers.ResultsAPIWrapper
    at com.fw.wrappers.mock.ResultsApiWrapperMock.<init>(ResultsApiWrapperMock.java:12)
    at com.fw.repository.RepositoryTest.testRepo(RepositoryTest.java:38)
java.lang.IllegalArgumentException:类已被模拟:com.fw.wrappers.ResultsAPIWrapper
位于com.fw.wrappers.mock.ResultsApiWrapperMock。(ResultsApiWrapperMock.java:12)
位于com.fw.repository.RepositoryTest.testRepo(RepositoryTest.java:38)
但是如果我删除了
新的ResultsApiWrapper()
,那么我不知道如何指定要用作autowire模拟实现的类


我是不是误解了怎么做?我如何指定我希望JMockit使用我的
模型实现进行自动连线?

我也是新手,但我认为在您的情况下,类似的方法会起作用。。。 这将模拟ResultsAPIWrapper(),而不是初始化任何静态变量,并为load()创建特定的模拟:

新模型(){
@嘲弄
void$clinit(){
//禁用静态初始化
}
@嘲弄
公共字符串加载(){
返回“完成”;
}
};

有一件事我没有试过,但它仍然不起作用。JMockit仍然抱怨ResultsAPIWrapper已经被模拟(由于@Injectable字段)。
new MockUp<ResultsAPIWrapper>() {
  @Mock
  void $clinit() {
    //disable static initialization
  }

  @Mock
  public String load() {
     return "done";
  }
};