我在模拟接口值之一时遇到问题。当我在调试模式下运行测试时,它可以正常工作,但是在运行时却显示org.mockito.exceptions.misusing.UnfinishedStubbingException
。
更新16.08.2018:它仅在我在折线或之前设置断点时才有效-如果没有断点,测试也会在调试时崩溃。如果我一直拿着F9,则某些测试通过并且有些失败,因此必须将其与初始化时间联系起来,但仍然不知道如何解决它
在调试模式下,它可以通过,但是在运行模式下,执行以下命令时,Service中出现异常:String name = getPhoneBookName();
我也尝试将Mockito.when
移至安装程序块,但这无济于事
有任何想法吗?
代码如下:
MyServiceSpec:
private PropertyDAO propertyDAO = mock(PropertyDAO.class)
def "Should fill all fields property for existing user"() {
given:"mock values to check proper form"
when(propertyDAO.getValue(PropertyDAO.Key.REMOTE_BOOK_NAME)).thenReturn("Phonebook")
when:
service.someMethod()
服务:
someMethod() {
String name = getPhoneBookName();
if (name != null) {
map.put("remotePhoneBookName", name);
}
}
@Override
public String getPhoneBookName() {
return propertyDAO.getValue(PropertyDAO.Key.REMOTE_BOOK_NAME);
}
物业道
public interface PropertyDAO {
String VERSION_KEY = "VERSION";
public enum Key {
VERSION,
REMOTE_BOOK_NAME
}
String getValue(Key key);
物业休眠DAO
@Repository("propertyDAO")
@Qualifier("hibernate")
public class PropertyHibernateDAO implements PropertyDAO {
@Override
@Transactional(readOnly = true)
public String getValue(Key key) {
String result = null;
Session session = sessionFactory.getCurrentSession();
String dbKey = DB_KEYS.get(key);
Criteria criteria = session.createCriteria(Property.class);
criteria.add(Restrictions.eq("key", dbKey));
Property property = (Property) criteria.uniqueResult();
if (property != null) {
result = property.getValue();
}
return result;
}
最佳答案
好,我知道了。
事实证明,在关键模拟下面的测试中,我尝试从问题中模拟someMethod(),然后在执行时崩溃。非常感谢@MichałPiątkowski,因为最后您是对的;)
当我替换时它起作用:
when(propertyDAO.getValue(PropertyDAO.Key.REMOTE_BOOK_NAME)).thenReturn("Phonebook")
when(configuration.getStationValues(any(), any(), anyString())).thenReturn(someMethod())
至
when(propertyDAO.getValue(PropertyDAO.Key.REMOTE_BOOK_NAME)).thenReturn("Phonebook")
def method =someMethod()
when(configuration.getStationValues(any(), any(), anyString())).thenReturn(method)
即使在下一栋楼中,您也可以感觉到代码的味道,但是我暂时还不知道其他解决方法