0

我正在尝试模拟 Model.finder 来测试我的服务,但似乎由于某种原因没有注入 mockito,我不知道为什么。请帮忙。

public static Result deals() {
    List<Product> finder = new Model.Finder<Long, Product>(Long.class, Product.class).all();
    JsonNode jsonNode = Json.toJson(finder);

    return ok(Json.stringify(jsonNode));
}

这是我的测试

@Mock
    private Model.Finder finder;

    @Before
    public void setUp() throws Exception {
        initMocks(this);
        start(fakeApplication());

        Product product = new Product();
        product.id = 1L;
        product.title = "Milk";

        List<Product> products = Arrays.asList(product);

        when(finder.all()).thenReturn(products);

    }

    @Test
    public void shouldGetDeals() {
        Result result = routeAndCall(fakeRequest(GET, "/products"));
        assertThat(status(result), is(200));

        String deals = contentAsString(result);

        assertThat(deals, containsString("Milk"));
    }

所以,结果是 Model.Finder 返回 0 因为模拟没有被调用。我不确定这是否是您在 Play 2.1 中模拟的方式?

4

1 回答 1

0

您的deals()方法是制作一个新的Finder,而不是使用您创建的模拟。您将需要稍微重构您的代码,以使其更具可测试性。您可能想阅读https://code.google.com/p/mockito/wiki/MockingObjectCreation以了解有关如何执行此操作的一些想法。

于 2013-04-22T22:27:00.060 回答