如何在站点砖中测试回复<?>



我正在使用sitebricks,我必须使用jmock测试Reply,但对象不是接口,所以我不能模拟它。下面是一些代码:

@Get
Reply<Product> view() {
return Reply.with(new Product("Anti-ageing cure"))
          .as(Json.class);
}

我唯一的想法就是回复如下:

public class ReplyFake extends Reply{
 ....reply methods....
}

但我不确定这是最好的做法

首先创建自己的断言类:

public class SitebricksReplyAssertion {
  public static <T> void assertIsRepliedWith(Reply<T> reply, T expected) {
      assertFieldValue("entity", reply, expected);
  }
  public static <T> void assertThatReplyStatusIs(Reply<T> reply, int expected) {
      assertFieldValue("status", reply, expected);
  }
  private static <T> void assertFieldValue(String fieldName, Reply reply, T expected) {
      Field field = null;
      try {
          field = reply.getClass().getDeclaredField(fieldName);
          field.setAccessible(true);
          T actual = (T) field.get(reply);
          assert actual != null;
          assertThat(actual, is(equalTo(expected)));
      } catch (NoSuchFieldException e) {
      e.printStackTrace();
      } catch (IllegalAccessException e) {
      e.printStackTrace();
      }
 }
}

和测试:

public class ServicesTest {
    @Rule
    public JUnitRuleMockery context = new JUnitRuleMockery();
    @Mock
    PendingUserRepository userRepository;
    @Test
    public void testName() throws Exception {
    Services services = new Services(userRepository);
    final List<PendingUserEntity> users = new ArrayList<PendingUserEntity>() {{
        add(new PendingUserEntity("email", "name", "url"));
        add(new PendingUserEntity("email2", "name2", "url2"));
    }};
    context.checking(new Expectations() {{
        oneOf(userRepository).retrieveAll();
        will(returnValue(users));
    }});
    final Reply<List<PendingUserEntity>> rep = services.getAll();
    SitebricksReplyAssertion.assertThatReplyStatusIs(rep, 200);
    SitebricksReplyAssertion.assertIsRepliedWith(rep,users);
    }
}

和服务类:

@At("/getpendingusers")
@Get
public Reply<List<PendingUserEntity>> getAll() {
List<PendingUserEntity> pendingUserEntities = pendingUserRepository.retrieveAll();
return Reply.with(pendingUserEntities).as(Json.class);
}

断言类的代码:https://gist.github.com/AdelinGhanaem/4072405/

最新更新