有没有办法在类上不使用@RunWith(MockitoJUnitRunner)注释来模拟存储库?
我有一个测试通过了,没有注释,但是失败了。没有它,我的回购测试就不起作用。这是第二十二条军规。
当我使用这个注释时,我的测试中的当()方法不再是存根行为,模拟什么也不做,尽管设置了断点,那些断点被击中(表明行/方法正在运行),验证(...,次(x))语句说模拟对象从未与该方法相互作用。我一直在想为什么使用@RunBy(MockitoJUnitRunner)注释会使Mockito最简单的部分不起作用。
我找不到任何线程询问这个,但也许有人知道更好的关键字使用。这听起来像是已知的问题吗?
这是我的测试:
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
// toggling this below annotation is the source of grief.
//@RunWith(MockitoJUnitRunner.class)
public class LoadEditEntityChangeLogServiceImplTest {
@InjectMocks
private ServiceImpl serviceMock;
@Mock
private EditStepRepository editStepRepository;
@Mock
private EditMapper editMapper;
@Before
public void init() {
initMocks(this);
}
@Test // when the RunWith is commented out, this passes. When it is not, the test fails the verify assert.
public void mapEditEntityFromAction_Test() {
EditDTO editDTO = Mockito.mock(EditDTO.class);
when(editDTO.getSysNum()).thenReturn((long)7334);
EditEntity editEntity = new editEntity();
editEntity.setSysNum(editDTO.getSysNum());
when(editMapper.mapToEntity(eq(editDTO))).thenReturn(editEntity);
editEntity response = serviceMock.mapEditEntityFromAction(editDTO);
verify(loadEditMapper, times(1)).mapToEntity(eq(loadEventDTO));
assertEquals(loadEventDTO.getSystemNumber(), response.getSystemNumber());
}
@Test // this will fail without the @RunWith as the mocked repo will be null and throws NullPointerException when used.
public void updateConvertedEventSegment_Test() {
EditEntity editEntity = new EditEntity();
EditStepEntity editStepEntity = new EditStepEntity();
editEntity.setEditStep(editStepEntity);
doReturn(editStepEntity).when(editStepRepository).save(any());
serviceMock.updateEditStep(editEntity);
verify(editEntity, times(1)).getEditStep();
verify(editStepRepository, times(1)).save(eq(editStepEntity));
}
}
你应该了解这个跑步者实际上做了什么:
基本上,它允许注入mock(由mockito用mockito.mock(…)编写)进入带有@Mock
注释的测试字段。在问题中,由于您已经注释掉了跑步者,所有这些字段都将为空。
当你用@InjectMocks
注释某件事时,它会将模拟注入到注释引用类型的对象的字段中。
这里还有一点需要澄清:MockitoAnnotations。initMocks(this)
将与“runner”执行相同的操作,因此无需同时包含这两个部分(如果由于某种原因无法使用runner,例如必须使用另一个runner,则应使用initMocks
)
现在,你问:
有没有一种html" target="_blank">方法可以在类上没有@RunFor(MockitoJUnitRunner)
注释的情况下模拟存储库?
答案是-是的,你可以,事实上你不必使用跑步者,有时它更方便。
所以,假设您真的使用了这个runner,真正的问题是“我的存储库不工作”到底是什么意思。这是否意味着服务中存在指向此存储库及其null的引用?
这是否意味着有一个模拟存储库,但是当你执行“测试下”的调用时,模拟是不同的?
您没有在代码中显示它,但我假设您有一些类似的:
public class ServiceImpl {
private final EditStepRepository editStepRepository;
public ServiceImpl(EditStepRepository editStepRepository) {
this.editStepRepository = editStepRepository;
}
...
}
但是如果是这样,一旦你创建了一个mock(实际上应该有一个mock注入到ServiceImpl
类中(用调试器或其他东西检查一下),应该在存储库上指定期望,通常应该在测试:
Mockito.when(editStepRepository.doSomething(...)).thenReturn(...)
你没有放这些线,这就是为什么它不起作用。
但总的来说,由于这个问题包含了许多不确定的技术细节,像这样,我只能说其他的猜测。。。
问题内容: 我有一个基于Gradle的Java项目,现在我想使用PowerMock模拟一个私有方法。问题是我无法使用PowerMockRunner,因为添加注释时总是会收到以下异常。 错误: 这是我的测试依赖项: 完全为空(初始化错误)时,测试本身也会失败: 任何想法可能有什么问题吗?使用PowerMock的其他测试运行正常(没有一个使用PowerMockRunner)。 问候和感谢您的任何帮助!
我遇到了无法使用Maven运行JUnit5测试的问题。在IDE中运行它们工作正常,但使用“mvn测试”会产生以下输出: 这是我的测试课程: pom: 我做了一些研究,我认为这可能与混合JUnit4和JUnit5特性有关,这导致maven surefire插件无法运行测试。然而,我找不到那些剩余的JUnit4特性可能在哪里。我将感谢任何帮助。
我正在尝试使用空手道独立震击器执行测试。在整个项目中,我在查找文件时使用。 但是,当我试图从CLI执行测试时,会收到以下错误: 命令: 似乎我将不得不声明执行类路径,你能提供一些关于如何做到这一点的见解吗?我不确定我的问题是否与[空手道][独立]错误:无法找到或读取文件
附加信息@Saifur我创建了一个单独的基类,在其中我初始化了驱动程序实例。我在@BeForeClass中调用这个实例,在@afterClass中调用driver.quit()。通过在testng.xml中提供两个不同的类,我试图运行这个实例。
我正在尝试用Maven/Intellij运行spock测试。但是maven和intellij都没有接受测试类。它肯定会拾取类,但不会在类中执行任何测试。 2)Surefire插件配置正确,因为它会拾取文件进行测试 3)target/test-classs文件夹中生成的测试类 我需要帮助我在这里错过了什么。
我正在使用带有React-Test-Library的jest来测试一个具有自定义prop-types验证器的组件。验证器如下所示: 我的测试看起来是这样的: 当呈现错误的时,验证器按预期工作。我在控制台中得到以下错误: 但在运行上述测试时,我在终端中得到这样的消息: 我错过了什么?