首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMockit :如何将MockUp类注入到测试类中?

JMockit :如何将MockUp类注入到测试类中?
EN

Stack Overflow用户
提问于 2015-09-29 01:33:54
回答 1查看 820关注 0票数 3

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

例如:

代码语言:javascript
复制
// 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";
   }
}

如果我尝试上述操作,我会得到一个错误

代码语言:javascript
复制
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)

但是如果我删除了new ResultsApiWrapper(),那么我就不知道如何指定哪个类是我想要用作我的模拟的自动线缆实现的类。

我是不是误解了该怎么做?如何指定我希望JMockit使用我的MockUp<>实现进行自动布线?

EN

回答 1

Stack Overflow用户

发布于 2015-09-30 14:16:07

我也是新手,但我想这样的东西在你的情况下是可行的。这将模拟ResultsAPIWrapper(),并且不初始化任何静态变量,并为load()创建特定的模拟:

代码语言:javascript
复制
new MockUp<ResultsAPIWrapper>() {
  @Mock
  void $clinit() {
    //disable static initialization
  }

  @Mock
  public String load() {
     return "done";
  }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32828699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档