- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在使用 Testng 6.8.8 + Mockito 1.10.19,显然我们不能使用 MockitoJUnitRunner
,但验证框架仍然有效!在这个thread我读到它不应该是这样的。有人可以解释吗?这是因为我们还有 @Before
* 回调和 MockitoAnnotations.initMocks(this)
吗?
我的代码:
public class MealTransformerTest {
MealTransformer mealTransformer = new MealTransformer();
@Test(expectedExceptions = NotImplementedException.class)
public void shouldThrowException() throws NotImplementedException {
mealTransformer.transform(any(),
any(),
any(),
any());
}
}在此特定测试中没有失败,但当我运行该套件时,Mockito 会告诉我匹配器的不正确使用。
我也可以这样做:
public class MealTransformerTest {
MealTransformer mealTransformer = new MealTransformer();
//I don't need it in the tests. But I need at least 1 @Mock or @Spy to trigger framework validation
@Mock
private CloneUtils cloneUtils;
@BeforeMethod
void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test(expectedExceptions = NotImplementedException.class)
public void shouldThrowException() throws NotImplementedException {
mealTransformer.transform(any(),
any(),
any(),
any());
}
@Test(expectedExceptions = NotImplementedException.class)
public void shouldThrowException123() throws NotImplementedException {
mealTransformer.transform(any(),
any(),
any(),
any());
}
}
我收到:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced argument matcher detected here:
....
不要误会我的意思,我真的很喜欢它的工作方式,但我很惊讶地看到它没有 @RunWith(MockitoJUnitRunner.class)
。
最佳答案
Matchers work via side-effects and static global state ,因此您可以将此调用分成几部分以查看发生了什么。
MockitoAnnotations.initMocks(this);
// in @Before [1]
mealTransformer.transform(any(), any(), any(), any());
// [6] [2] [3] [4] [5]
在 init [1] 之后,Java 看到四次调用 any
[2-5] 和一次调用 transform
[6]。然而,Mockito 只看到对 any
的四个调用;因为 mealTransformer
不是 mock,Mockito 看不到它的调用。如果您单独运行该测试,Mockito 将留下四个未使用的已记录匹配器。 JVM 将拆除测试框架,并且测试将通过——除非您在 @After
方法中调用了 validateMockitoUsage
,这会捕捉到这种情况。
但是,当您有两个测试时,它们会像这样叠加:
MockitoAnnotations.initMocks(this);
// [1]
mealTransformer.transform(any(), any(), any(), any());
// [6] [2] [3] [4] [5]
// test passes! now the next test
MockitoAnnotations.initMocks(this);
// [7]
mealTransformer.transform(any(), any(), any(), any());
// [12] [8] [9] [10] [11]
这里,第 7 步发生在与第 1-6 步相同的 JVM 中的相同测试执行中,这意味着当堆栈上有 4 个未使用的匹配器时调用 initMocks
。这永远不应该发生,所以 initMocks
捕获它的第一个机会来捕捉这个错误。一个症状是,如果 mised matcher exception 对应于失败的测试之外的 matcher: testB
failing due to the misuse of a matcher in testA
。通过在 @After
消息中使用 validateMockitoUsage
,您会让适当的测试失败。
关于java - Mockito:是否在没有 @RunWith(MockitoJUnitRunner.class) 的情况下启用框架使用验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41045467/
我正在尝试使用 @InjectMocks 和 @Mock 进行单元测试。 @RunWith(MockitoJUnitRunner.class) public class ProblemDefiniti
这个问题在这里已经有了答案: Initialising mock objects - Mockito (8 个答案) 关闭 6 年前。 我正在使用 Junit 4.8.2。当我使用 @RunWith
这个问题在这里已经有了答案: @RunWith(MockitoJUnitRunner.class) vs MockitoAnnotations.initMocks(this) (2 个答案) 关闭
我编写了一个 Spring Boot 应用程序,我能够使用 MockMvc 访问和测试 Controller。问题是在测试期间没有强制执行安全性,我可以在没有用户的情况下访问 Controller。
我尝试在 Mockito 的单元测试中使用游标,但 getCount() 方法始终返回 0,即使我添加了一行。有人可以帮助我吗? final Cursor cursor = new MatrixCur
我正在尝试使用 @Mock 编写测试和 @Captor注释。但是,对象没有被创建,所以我得到 NullPointerExceptions . 考试: @RunWith(MockitoJUnitRunn
我需要测试parserService。不幸的是,它表明 RecordDao 对象应该是 Autowired 的,但事实并非如此,在运行测试时它仍然是 null 。如何解决? 解析器 Controlle
当我使用 MockitoJunitRunner 测试以下函数时,它按预期工作正常。但是当我使用 PowerMockRunner 运行相同的测试时,出现以下异常: org.jasypt.exceptio
我的测试正在使用 @RunWith(MockitoJUnitRunner.class) annotation,在 Java 6 中运行良好,但升级到 Java 8 后,测试开始失败,并出现以下异常。这
我们正在使用 Testng 6.8.8 + Mockito 1.10.19,显然我们不能使用 MockitoJUnitRunner,但验证框架仍然有效!在这个thread我读到它不应该是这样的。有人可
下面的例子是正确的。问题是我确实需要 @InjectMocks 注释。当我将 SpringJUnit4ClassRunner.class 替换为 MockitoJUnitRunner.class 时,
我一直在尝试在测试类中使用配置属性,但找不到方法,因为我总是遇到 NullPointerException。 application.yaml affix: lover: 'interests'
我对 SpringJUnit4ClassRunner 的用法有疑问。对于纯 Junit 或单元测试用例,我们应该使用基于 Spring 的注释,例如 @Autowired 和 SpringJUnit4
在编写新的 jUnit4 测试时,我想知道是使用 @RunWith(MockitoJUnitRunner.class) 还是 MockitoAnnotations.initMocks(this)。 我
我正在启动一个新的 Dropwizard 项目,但无法使用 MockitoJUnitRunner 运行测试。 我能够运行主应用程序。所以,我猜测这不是 JRE/JDK 问题。 以下是我的项目中的一些文
我使用 @RunWith(MockitoJUnitRunner.class) 与mockito 进行 junit 测试。但现在我正在使用 spring boot 应用程序并尝试使用 @RunWith(
在通常使用 @Mock 和 @InjectMocks 注释的模拟中,被测类应该使用 @RunWith(MockitoJUnitRunner.class)。 @RunWith(MockitoJUnitR
@RunWith(MockitoJUnitRunner.class) 和 @RunWith(SpringJUnit4ClassRunner.class) 有什么区别?什么时候合适使用它? 最佳答案 M
我刚刚将我的项目从 Spring Boot 2.1 迁移到 2.3,因此现在有了 JUnit 5(带有复古)(还包括版本 3.3.3 的 mockito-core 和 mockito-junit-ju
我是一名优秀的程序员,十分优秀!