【问题标题】:Testing abstract class with JPA repository dependency使用 JPA 存储库依赖项测试抽象类
【发布时间】:2020-07-15 12:10:14
【问题描述】:

我有一个抽象类,我想对其进行单元测试。

public abstract class Processor {

    private final MyRepo repo;

    protected Processor (final MyRepo repo) {
        this.repo = repo;
    }

    public abstract MyResponse process(final Request req, final String id);

    protected void saveRequest(final Request req, final String id) {

        final Entity entity = Entity.builder()                
                .status(SUCCESS.name())
                .build();

        Entity entity = repo.save(entity);
        LOG.debug("Entity Saved {}", entity);
    }

    protected boolean checkDupe(final Request req) {
        return repo.check(request.getname(), LocalDate.parse(request.getDate()));
    }   
}

我有以下单元测试类:

@ExtendWith(SpringExtension.class)
public class ProcessorAbstractClassTest{

    @Mock
    private MyRepo repo;

    @Test
    public void shouldSaveRequest() {

        Processor processor = Mockito.mock(
                Processor.class,
                Mockito.CALLS_REAL_METHODS);


        MyRequest req = new MyRequest ("blah blah");

        Entity entity = Entity.builder().build();

        processor.saveRequest(req, "123");

       //check object passed into save but not save
    }

}

我想测试与save() 的交互并验证传递给它的对象实体。鉴于这是一个抽象类,而具体的 impl 类正在为依赖项提供 super(repo) ,我该如何实现这一点?

【问题讨论】:

    标签: java spring junit mockito powermock


    【解决方案1】:

    试试这个:verify(repo).save(isA(Entity.class));

    【讨论】:

      【解决方案2】:

      因为我有扩展处理器类的具体类,所以我用它们来测试超类方法。

      例如:

      @Test
      public void givenNonAbstractMethod_whenConcreteImpl_testCorrectBehaviour() {
          MyConcreteProcessor proc = new MyConcreteProcessor ();
          String actual = proc.saveRequest(new MyRequest());
       
          assertEquals("TEST", actual);
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-26
        • 2020-07-31
        • 2012-04-16
        • 1970-01-01
        • 1970-01-01
        • 2011-12-12
        • 1970-01-01
        • 2012-03-02
        • 1970-01-01
        相关资源
        最近更新 更多