Java Dropwizard-DAO-mock-mockito

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

这里可能有一个简单的问题,但我无法让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.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)
,看看这是否有什么不同。

对不起,我以前应该这么说,这是我尝试过的,但它不会改变任何东西。我把它放在那里是因为我看到了一些例子。谢谢你的帮助。不过它不应该在那里。这会使你的存根失效不,这没什么区别。。。谢谢