gpt4 book ai didi

java - 使用@Mock 和@InjectMocks

转载 作者:IT老高 更新时间:2023-10-28 20:53:53 32 4
gpt4 key购买 nike

我目前正在研究 Mockito 框架,并使用 Mockito 创建了几个测试用例。但后来我读到,我可以使用 @Mock@InjectMocks 而不是调用 mock(SomeClass.class) - 我唯一的需要做的是用 @RunWith(MockitoJUnitRunner.class) 注释我的测试类或使用 MockitoAnnotations.initMocks(this);@Before方法。

但它不起作用 - @Mock 似乎不起作用!这是我的 2 个代码修订版 - 一个使用注释,一个没有。

我做错了什么?

public class ReportServiceImplTestMockito {

private TaskService mockTaskService; // This is the Mock object
private ReportServiceImpl service;

@Before
public void init(){
service = new ReportServiceImpl();
mockTaskService = mock(TaskServiceImpl.class);
service.setTaskServiceImpl(mockTaskService);
}
/// ...

Some tests
}

正如我所说 - 这工作很棒。但以下不会:

@RunWith(MockitoJUnitRunner.class)
public class ReportServiceImplTestMockito {

@Mock
private TaskService mockTaskService;

@InjectMocks
private ReportServiceImpl service;

// Some tests
}

这里是 ReportServiceImpl 类:

@Service
public class ReportServiceImpl implements ReportService {

@Autowired
private TaskService taskServiceImpl;

public ReportServiceImpl(){}

public ReportServiceImpl(TaskService taskService){
this.taskServiceImpl = taskService;
}

public void setTaskServiceImpl(TaskService taskServiceImpl) {
this.taskServiceImpl = taskServiceImpl;
}
}

我错过了什么?

最佳答案

好吧,我搞错了!!!我使用了 @InjectMocks 但在 init() 方法中初始化了相同的变量...所以发生的事情是,mockito 将模拟对象注入(inject)到我的变量中 - 但几秒钟后我运行了它 - 初始化了同一个变量!!!

关于java - 使用@Mock 和@InjectMocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9076302/

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