我正在尝试使用mockito并在PageBuilderService服务类中注入依赖项来运行这样的junit测试。
@RunWith(MockitoJUnitRunner.class)
@ActiveProfiles(profiles = "staging")
@ContextConfiguration(loader = AnnotationConfigContextLoader.class , classes = {ContentProperties.class , MasterPropertiesFactory.class })
class PageBuilderServiceTest {
@Mock
public CService cs;
@Mock
private RService rs;
@InjectMocks
PageBuilderService pageBuilderService ;
@ParameterizedTest
@EnumSource(HompageEnum.class)
@DisplayName("Testing doIt wsith EnumSource")
public void checkRowposition(HompageEnum homepageEnum) {
Mockito.when(contentProperties.getPageFolder(anyString())).thenReturn("http://google.com");
}
}
我的主要课程是
@Service("pgService")
public class PageBuilderService {
@Autowired
private RService rs;
@Autowired
public CService cs;
public Queue<String> getPaginatedContent(HomepageRequest homepageRequest) {
Queue<String> staticContent = getStaticContent(homepageRequest.getUrl());
return staticContent
}
public Queue<String> getStaticContent(String url) {
Queue<String> files = new LinkedList<>();
String dir = contentProperties.getPageFolder(url);
return null;
}
}
当我们执行ContentProperties content = mock(ContentProperties.class)时,它可以正常工作,但是当我使用模拟Annotation时,contentProperties将变为null。
最佳答案
我看不到什么是contentProperties
-您没有在测试中注入它,但这显然是错误的一件事:
如果要启动spring,则必须使用SpringJUnit4ClassRunner.class
/ SpringRunner.class
而不是mockitoRunner运行它。
没有弹簧流道,则没有必要指定:
@ActiveProfiles(profiles = "staging")
@ContextConfiguration(loader = AnnotationConfigContextLoader.class , classes = {ContentProperties.class , MasterPropertiesFactory.class })
除此之外,请检查
@Mock public CService cs;
和其他带有@Mock
注释的字段是否确实有价值(基本上,它是Mockito运行程序应该执行的操作,因此,除非此处缺少某些内容,否则其他模拟和contentProperties
之间没有区别) )