这是我的课我想嘲笑。
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可以使用create this,但我不知道如何注入一个原语(boolean / cacheTimeToLive)。有没有办法在我的测试中做到这一点?
答案 0 :(得分:4)
- 构造函数注入;选择最大的构造函数,然后使用在测试中声明的模拟来解析参数。如果使用构造函数成功创建了对象,则 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' s @Before
的设置方法。