我想模仿下面的课程:
public class MyRunner {
private String name;
private User user;//not final
public MyRunner(String name, User user) {
this.name = name;
this.user = user
}
//...something complicated in the methods
}
就像JMockit一样
@ExtendWith(MockitoExtension.class)
public class MyRunnerTest {
@Inject
private String name = "sth";
@Inject
private User user;
@Tested
private MyRunner tested;
}
与Mockito 3类似,
@ExtendWith(MockitoExtension.class)
public class MyRunnerTest {
@Mock
private String name;
@Mock
private User user;
@InjectMocks
private MyRunner tested;
@Test //from JUnit5
public void testSth() {
//...
}
}
问题:在构造过程中将name
字符串注入MyRunner
会失败,因为string
是最终类。收到如下错误消息:
Cannot mock/spy class java.lang.String
Mockito cannot mock/spy because :
- final class
可以使用新关键字初始化测试的类:
@ExtendWith(MockitoExtension.class)
public class MyRunnerTest {
private String name = "sth";
@Mock
private User user;
private MyRunner tested = new MyRunner(name, user);
@Test //from JUnit5
public void testSth() {
//...
}
}
然而,上面的解决方案并不像仅仅使用注释那样流畅
问题:如何将最终类注入到注释为@InjectMocks
的对象中,而不是显式地用new
关键字构建它?
有很多方法可以做到这一点。以下是3个概念上不同的:
选择1
首先,如果你真的在谈论字符串,那么模仿它可能没有多大意义:基本上你的例子根本不需要mockito。你可以简单地:
public class UserTest {
private final String NAME = "sampleName;
private User tested = new User(NAME);
...
}
备选案文2
现在,假设你不是真的在这里谈论String
类,最好的选择是通过接口编程,创建Mocks相当简单:
public class User {
public User(Name name) {
...
}
}
public interface Name {
String getValue();
}
@ExtendsWith(MockitoExtension.class)
public class UserTest
@Mock
private Name name;
@InjectMocks
private User tested;
选择3
如果您绝对需要模拟静态类,您可以在mockito中这样做,但它需要一些额外的设置:基本上,您在目录src/test/resources/mockito extensions中创建一个文件org.mockito.plugins.MockMaker
,该文件将包含:
mock-maker-inline
有关更多信息,请参阅本教程
问题内容: 我的spring bean具有一个带有唯一强制性参数的构造函数,我设法用xml配置对其进行了初始化: 然后,我像这样使用此bean,并且效果很好。 但是我想用注释指定contructor arg值,例如 这可能吗 ? 提前致谢 问题答案: 首先,必须在bean定义中而不是在注入点中指定构造函数arg。然后,你可以利用spring的注释(spring 3.0) 就我所看到的问题而言,这可
问题内容: 我已经用策略模式实现了一个程序。所以我有一个在某些地方使用的接口,并且可以替换具体的实现。 现在我要测试该程序。我想以类似的方式做。编写一次测试,针对该接口进行测试。应在测试开始时注入具体的接口实现,以便我可以轻松地替换它。 我的测试类看起来与此类似: 在开始测试时,必须使用参数化的构造器来注入具体的策略实施。 现在我没有让TestNG运行它并注入具体的实现实例。我试图与继承几种方法,
我有一个类< code >配置: 配置java 我如何将它注入到某个构造函数中,例如: 我希望这个字符串 从配置中注入了值。这可能吗?
问题内容: 我有一堂课: 配置文件 我如何将其注入一些构造函数,即: 我希望此字符串具有从Config注入的值。那可能吗? 问题答案: 您将必须命名Bean,然后在自动装配引用该名称时使用注释。 例: 配置文件 SomeC.java
我试图了解DI在我们的代码库(Kotlin)中是如何使用的。我们正在使用googleguice进行依赖注入。 下面是一个示例类: 在模块类中: DepB类别: 据我所知,对于用< code>@Inject注释的变量,Google Guice会使用模块类来解决这些依赖关系。所以< code>DepA对象的注入方式是有意义的。 但是呢?我们如何能够在不指定任何位置的情况下注入DepB?
我是Java Guice的新手,在设计应用程序时遇到麻烦。 我将尝试尽可能简单地解释我的设计和期望的结果。 我有一个名为 的接口,以及该接口的 3 个实现,比如 、。 我有一个名为的类,带有以下构造函数: 现在我希望能够使用注解注入