gpt4 book ai didi

java - JMockit : How to inject a MockUp class into a tested class?

转载 作者:行者123 更新时间:2023-12-02 19:10:35 26 4
gpt4 key购买 nike

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

例如:

// 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";
}
}

如果我尝试上述操作,则会收到错误

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()那么我不知道如何指定我想要用作 Autowiring 的模拟实现的类。

我是否误解了如何做到这一点?我如何指定我希望 JMockit 使用我的 MockUp<> Autowiring 实现?

最佳答案

我也是新人,但我认为这样的事情适合你的情况......这将模拟 ResultsAPIWrapper() 并且不会初始化任何静态变量并为 load() 创建特定的模拟:

new MockUp<ResultsAPIWrapper>() {
@Mock
void $clinit() {
//disable static initialization
}

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

关于java - JMockit : How to inject a MockUp class into a tested class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32828699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com