Java Dropwizard-DAO-mock-mockito
这里可能有一个简单的问题,但我无法让Dao模拟工作Java Dropwizard-DAO-mock-mockito,java,testing,mockito,dao,dropwizard,Java,Testing,Mockito,Dao,Dropwizard,这里可能有一个简单的问题,但我无法让Dao模拟工作 import com.feetme.backend.jdbi.IRecordDAO; import com.feetme.backend.representations.Record; import io.dropwizard.testing.junit.ResourceTestRule; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; import org.j
import com.feetme.backend.jdbi.IRecordDAO;
import com.feetme.backend.representations.Record;
import io.dropwizard.testing.junit.ResourceTestRule;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class BasicResourceTest {
private static final IRecordDAO dao = mock(IRecordDAO.class);
private final Record record = getDummyRecord();
@ClassRule
public static final ResourceTestRule resources = ResourceTestRule.builder()
.addResource(new BasicResource(dao))
.build();
private static Record getDummyRecord(){
Record rec = new Record();
rec.setId(10);
return rec;
}
@Before
public void setup() {
when(dao.findRecordById(eq(10))).thenReturn(record);
reset(dao);
}
@Test
public void testGetId_Patient() {
Record r = dao.findRecordById(10);
assertThat(r).isEqualTo(record);
assert(r.getId() == 10)
}
在这种情况下,我的两个断言永远都不正确
我还尝试将重置调用放入@After方法中。同样的问题
我的IRecordDAO方法通常只获取DB中的记录
我可能错过了一些明显的东西
任何帮助都将不胜感激
这里是DAO接口
@RegisterMapper(RecordMapper.class)
public interface IRecordDAO {
@SqlQuery("sql query ...")
Record findRecordById(@Bind("id") long id);
/**
* close with no args is used to close the connection
*/
void close();
编辑:实际上问题似乎与eq()方法有关。当我使用dao的一个不需要任何参数的方法做类似的事情时,我没有任何问题
当我用anyInt()替换等式(10)时,它工作得很好。我想我现在还可以,但是任何线索都欢迎
最后,将等式(10)替换为10很好。那么eq应该如何使用呢?在
setup()
方法中不要reset(dao)
。这会导致模拟dao忘记以前配置的存根。根据eq
的java文档,请参阅。
public static <T> T eq(T value)
Object argument that is equal to the given value.
公共静态T均衡(T值)
等于给定值的对象参数。
它用于对象,而10是int,这是一种基本类型。您可以尝试使用
新整数(10)
,看看这是否有什么不同。对不起,我以前应该这么说,这是我尝试过的,但它不会改变任何东西。我把它放在那里是因为我看到了一些例子。谢谢你的帮助。不过它不应该在那里。这会使你的存根失效不,这没什么区别。。。谢谢