我在模拟接口值之一时遇到问题。当我在调试模式下运行测试时,它可以正常工作,但是在运行时却显示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)


即使在下一栋楼中,您也可以感觉到代码的味道,但是我暂时还不知道其他解决方法

08-07 10:02