spring+jmockit单元测试

场景:

有一个service类下面自动注入了dao层,现在需要测试servic类,测试2中方法。

servier方法定义

接口
public interface ADao {
    A getA(long id);
}

服务接口
public interface AService {
    A getA(long id);
}

服务实现
public class AServiceimpl implements  AService{
    
    @Autowired
    private ADao adao;

    public A getA(long id){
        return adao.getA(id);
    }
}

方法1

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class AServiceImplTest {

    @Autowired
    private AServiceImpl aService;

    @Capturing
    private ADao aDao;

    @Test
    public void createExam() {
        A a = A.builder().id(1L).build();
        new Expectations() {
            {
                aDao.getA(1);
                result = a;
            }
        };
        aService.createA(null);
        System.out.println();
    }
}

方法2

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class AServiceImplTest {

    @Tested
    private AServiceImpl aService;

    @Injectable
    private ADao aDao;

    @Test
    public void createExam() {
        A a = A.builder().id(1L).build();
        new Expectations() {
            {
                aDao.getA(1);
                result = a;
            }
        };
        aService.createA(null);
        System.out.println();
    }
}

方法1和方法2的区别是方法1通过@Capturing注解来模拟所有子类的方法,方法2是通过@tested和@Injectable类来模拟对象

你可能感兴趣的:(java)