我看到了我认为是错误的行为。@InjectMocks似乎并没有在每种测试方法之前创建一个新的测试主题。就像@Mock一样。在下面的示例中,如果Subject.section是最后一个,则@Test失败。如果不是最后两个都通过。我当前的解决方法是使用@BeforeClass,但这并不理想。
Subject.java:
package inject_mocks_test;
public class Subject {
private final Section section;
public Subject(Section section) {
this.section = section;
}
public Section getSection() {
return section;
}
}
Section.java:
package inject_mocks_test;
public class Section {}
SubjectTest.java
package inject_mocks_test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
public class SubjectTest {
@Mock
Section section;
@InjectMocks
Subject subject;
@BeforeMethod
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void test1() {
assertEquals(section, subject.getSection());
}
@Test
public void test2() {
assertEquals(section, subject.getSection());
}
}
干杯。
您正在使用@InjectMocks
for 构造函数
注入。只要Mockito发现未初始化的字段(空),这将起作用。JUnit在每次测试之前都会创建一个新的测试类实例,因此JUnit粉丝(像我一样)将永远不会遇到此类问题。TestNg不会创建测试类的新实例。它保持测试方法之间的状态,因此当MockitoAnnotations.initMocks(this)
第二次调用时,Mockito将发现已经初始化的
主题 字段并尝试使用 字段 注入。另一方面,这将起作用,直到该字段不是最终的。
这是一个错误吗?我相信不是-这是API设计的自然结果。一些解决方法是添加
this.subject = null;
用某种@AfterMethod
方法。
问题内容: 在我们的团队中,我们发现在使用和限定词时都有一些奇怪的行为。这是我们的测试课程: 运行该方法时,将得到以下结果: 我会理解它是否两次都写值,因为静态类成员的代码是从上到下执行的。 谁能解释为什么这种现象发生? 问题答案: 这些是您运行程序时采取的步骤: 在可以运行之前,必须按外观顺序通过运行静态初始化程序来初始化该类。 要初始化该字段,请开始执行。 打印的值。由于字段类型为,因此看起来
我看到了我认为是一种错误的行为。@InjectMocks似乎不会在每种测试方法之前创建一个新的测试主题。就像“模拟”一样。在下面的示例中,如果Subject.section是最终的@Test失败。如果不是最后都通过。我目前的解决方案是使用@BeforeClass,但这并不理想。 Subject.java: Section.java: 受试者测试。JAVA 干杯。
注意1:如果您有相同类型的字段(或相同的擦除),最好用匹配的字段命名所有@mock注释字段,否则Mockito可能会混淆,不会发生注入。 这是否意味着如果我有几个具有相同类型的字段,我不能只模拟其中一个字段,而是应该为所有具有相同类型的字段定义?这是已知的限制吗?有什么原因为什么它还没有被修复?通过字段名称匹配应该很简单,不是吗?
问题内容: 我在JTextPane / JTextField(或它们下方的字体渲染中的某个地方)中发现了一个奇怪的错误。我想知道是否有人遇到过这种情况,并且可能对此有解决方案。 我试图在JTextPane中显示一些“特殊”或稀有字符,并且一旦更改JTextField的字体(与JTextPane完全无关!),JTextPane就会“分手”,不再显示这些字符字符。 这应该可以更好地解释我的意思: 编辑
鉴于以下代码: 为什么开关语句在上匹配? 我的理解是,当时,不匹配,因为(实际上)计算结果为false。VS Code上的IntelliSense告诉我,也是一个
我最近注意到一些流口水规则的奇怪行为。我有班级心率,它有以下字段: 我的规则文件如下: 我想将字段<代码>心率更改为<代码>心率,并在我的规则中更改字段名称,以便我的新规则现在是: 但这会产生错误,即drools无法解析该字段的心率。但是,当我将规则更改回原来的规则时,使用心率(heartRate),它可以正常工作,尽管这样的字段已经不存在了。我得到以下错误: