这是我试图模拟的类。
private MemcachedClient memcachedClient;
private CachedObjectFactory cachedObjectFactory;
private int cacheTimeToLive;
private boolean hasCert;
@Autowired
public MyClass(CachedObjectFactory cachedObjectFactory,
MemcachedClient memcachedClient,
@Value("${cache.ttl.in.second}") int cacheTimeToLive,
@Value("${hasCert}") boolean hasCert) {
this.cachedObjectFactory = cachedObjectFactory;
this.memcachedClient = memcachedClient;
this.cacheTimeToLive = cacheTimeToLive;
this.hasCert = hasCert;
}
当我使用 @InjectMocks
时,它抱怨它无法弄清楚如何使用默认构造函数初始化它(因为没有)。 我认为 mockito 可以使用创建这个,但我不知道如何注入一个原语(布尔值/缓存时间到生活)。 有没有办法在我的测试中做到这一点?
参见 Mockito 文档:
构造函数
- 注入;选择最大的构造函数,然后仅使用测试中声明的模拟来解决参数。如果使用构造函数成功创建对象,则 Mockito 不会尝试其他策略。Mockito决定,如果对象具有参数构造函数,则不会损坏该对象。
注意:如果找不到参数,则传递 null。如果需要不可模拟的类型,则不会发生构造函数注入。在这些情况下,您必须自己满足依赖项。[...]
最后,在这种情况下,不会对类型进行注入:
public class ArticleManager { private ArticleDatabase database; private ArticleCalculator calculator; ArticleManager(ArticleObserver observer, boolean flag) { // observer is not declared in the test above. // flag is not mockable anyway } }
您必须自己满足依赖项,例如使用 JUnit 的@Before
设置方法。