我还没有看到这个问题的答案能解决我的问题。
我有一个服务类,它是用一个存储库和一个Orika MapperFacade构建的。在测试中,我正在安排存储库调用返回的实体列表。my doReturn(testList).when(testRepository).findAllBy...似乎正在工作。我的实际结果列表包含我在模拟列表中指定的相同数量的元素(.size()),但是这些值都是空的。我对Spring Boot相当陌生,对Mockito来说绝对是新手。我目前正在使用一个bean,它返回使用MapperFactory创建的MapperFacade,并定义了几个类映射。现在,我正在测试中为我的MapperFacade使用@Spy,并且可以严格基于断言列表大小相同的内容通过。我知道可能是我需要@Mock行为或MapperFacade,尽管它被用来迭代服务类中的列表。如何在测试中实现它不是积极的。我可以构建另一个DTO列表,该列表通常从循环迭代实体返回,但我对Mockito语法不熟悉,不确定如何运行该返回。
当尝试记录或断言列表元素的. getAnyValue时,我得到一个NullPointerException,但是当我在排列的列表中添加或删除元素时,列表的大小发生了变化。
任何信息赞赏。
服务等级
public class FightService {
private FightRepository repository;
private MapperFacade mapper;
@Autowired
public FightService(FightRepository r, MapperFacade m) {
this.repository = r;
this.mapper = m;
}
public List<FightDTO> getFightsByWinRound(int winRound){
List<FightEntity> entities = repository.findAllByWinRound(winRound);
List<FightDTO> returnVal = new ArrayList<>();
for(FightEntity e: entities){
FightDTO dto = mapper.map(e, FightDTO.class);
returnVal.add(dto);
}
return returnVal;
}
}
服务测试
@Slf4j
@RunWith(MockitoJUnitRunner.class)
public class FightServiceTest{
@Spy
private MapperFacade mapperFacade;
@Mock
private FightRepository testRepository;
@InjectMocks
private FightService systemUnderTest;
@Test
public void testGetFightsByWinRound_ScenarioA() throws Exception{
//Arrange
List<FightEntity> testList = new ArrayList<>();
FightEntity fightA = new FightEntity();
fightA.setFighter1("A");
fightA.setWinRound(15);
testList.add(fightA);
FightEntity fightB = new FightEntity();
fightB.setFighter1("B");
fightB.setWinRound(15);
testList.add(fightB);
FightEntity fightC = new FightEntity();
fightC.setFighter1("C");
fightC.setWinRound(15);
testList.add(fightC);
doReturn(testList).when(testRepository).findAllByWinRound(15);
//Act
List<FightDTO> actual = systemUnderTest.getFightsByWinRound(15);
//Assert
Assert.assertThat(actual.size(), is(3));
// I would be adding Assert.assertThat(actual.get(0).getFighter1(), is("A")) , but this is where the NPE arises.
//Verify
}
}
这适用于
@InjectMocks
private ServiceClass serviceClass;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
factory = new DefaultMapperFactory.Builder().build();
when(mapper.getMapperFacade()).thenReturn(factory.getMapperFacade());
// In case of custom mapping
factory.classMap(Source.class, Dest.class).customize(new CustomMapper())
.byDefault().register();
}
您可以在以下位置查看一些内部测试:https://github.com/elaatifi/orika/blob/master/tests/src/main/java/ma/glasnost/orika/test/converter/NumericConvertersTestCase.java#L113
为了获得可重用和可测试的rxjava代码,我使用ObservableTransformers分离了代码的各个部分。它在生产中工作得很好,但是测试它并不像预期的那么容易,因为我似乎无法模拟那些观察到的ransformers。 when(observableTransformer.apply(any())).thenreturn(observable.just(“mockedtext”)); 一旦调用
我正在尝试构建一个使用gradle作为构建工具和openjdk-11的原型。这个原型将在springboot框架上构建一个rest-api。 我的模块与rest api调用配合良好,并返回了预期结果。然而,当我现在试图为RESTAPI编写测试时,测试失败了,因为Mockito返回了空对象。如果您能了解我应该如何为这个rest api编写测试或如何修复它,我将不胜感激。 我的控制器: 服务: 模型:
我正在尝试对服务类进行单元测试,但模拟返回null 在上面的代码中,当调用到达服务类时为空。我不知道我是否错过了什么。我尝试使用和运行,但结果相同。感谢任何帮助。 提前谢谢你。
有一个方法
让我向您展示getCurrentWeatherWithForecastUsecase类actgually是什么样子: } //这很容易,它只需要一个天气存储库,并要求它获取结果。我把它发送回调用者,调用者将显示它。 更新: 以下是故障的整个堆栈跟踪:
我有以下几门课 我想为viewModel和UseCase编写一个ermetic测试: 但ViewModel.car似乎总是为空。在测试体中mockapi.fetchcar()检索提供的值,但在FetchCarUseCase中不检索。此外,如果我从界面中移除suspend关键字,那么嘲弄似乎可以很好地工作。 目前,由于一些其他条件,我无法使用Mockk库,所以我只能使用mockito。 我是不是漏掉