我有一个类,它有两个类似类型的字段。我嘲笑过他们两个。但是当我使用InjectMocks时,InjectMocks错误地将单个模拟注入到这两个字段中。
下面是示例代码类:
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import java.util.Set;
import java.util.function.Consumer;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class TestClass {
private final Consumer<Set<Integer>> intConsumer;
private final Consumer<Set<String>> stringConsumer;
void PrintClass(){
System.out.println("intConsumers: " + intConsumer);
System.out.println("stringConsumers: " + stringConsumer);
}
}
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.Set;
import java.util.function.Consumer;
@RunWith(MockitoJUnitRunner.class)
public class TestClassTest {
@Mock private Consumer<Set<Integer>> intConsumer;
@Mock private Consumer<Set<String>> stringConsumer;
@InjectMocks private TestClass testClass;
@Test
public void testPrint(){
testClass.PrintClass();
}
}
下面是我运行测试时的输出:testPrint()-intConsumer被注入到intConsumer和StringConsumer中。
intConsumers: intConsumer
stringConsumers: intConsumer
Process finished with exit code 0
我正在使用Maven。
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.7.19</version>
</dependency>
我创建了这个私有构造函数,专门用于使用InjectMocks进行测试。我不想将其公有/包私有,因此我不能使用字段注入。我也不想使用公共设置器公开这些字段。此外,我不想使我的领域非最终。
这是Mockito中一个公开的bug。
在我看来,PropertyAndSetterInjection将泛型类型和@mock的name属性考虑在内,因此它在字段注入方面的工作与预期一样。但它不能用于构造函数,因为ConstructorInjection仅使用SimpleArgumentResolver,而SimpleArgumentResolver很好地.非常简单,不像属性注入器那样有任何MockCandidateFilter。
在这种情况下,您可以使用反射来构建实例:
@Before
public void setUp() throws IllegalAccessException,
InvocationTargetException,
InstantiationException,
NoSuchMethodException {
final Constructor<TestClass> constructor = TestClass.class.getDeclaredConstructor(Consumer.class, Consumer.class);
constructor.setAccessible(true);
testClass = constructor.newInstance(intConsumer, stringConsumer);
}
我使用一个Android库,它要求我创建两个类,每个类继承自不同的类 (具有公共基类) 现在我有这个代码: 我必须复制这个类来创建一个扩展,即使我的两个类共享完全相同的代码。 我简化了示例的代码,但重复可能很重要 我决定将代码放在这两个类之外的静态方法中,并在类重写的方法中调用它们,但我认为必须有一种更干净的方法来做到这一点。 你能帮我解决这个问题吗? 和都继承自。
我正在使用Mockito编写单元测试,但我在模仿注入的类时遇到了问题。问题是两个注入的类是相同的类型,仅通过它们的注释来区分。如果我试图简单地模拟,那么在我的测试中,该模拟不会被注入,并且该对象为。我如何模拟这些对象?
但是我有两种回购方式 如何创建两个bean,其中一个是用注入的,另一个是用注入的?
问题内容: 看这个: 现在,我有了一些值和一个从文件中加载的值的实例化。我希望将两个结构合并到一起,以便同时获取两个结构的内容。应该覆盖设置的任何内容,而 可能没有设置所有的字段 。(为什么?因为潜在的用户可能不知道默认值,所以删除该条目等同于设置默认值-我认为) 我认为我需要对此进行反思: 在这里我不确定: 如果根本需要反思 可能有更简单的方法可以做到这一点 我在这里看到的另一个问题是检查零值可
我有一个类,它有两个相同类型的最终字段,我需要在第二个字段中注入if属性
输出如下:http://imgur.com/a/nu3n6