我正在尝试使用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之间没有区别) )

09-11 18:30