运行springjunit测试而不使用@injectmock

fhg3lkii  于 2021-07-16  发布在  Java
关注(0)|答案(2)|浏览(404)

我正在尝试使用没有@injectmocks注解的junit测试来测试一个类(及其方法)。注解将不适用于我,因为我尝试测试的类具有@injectmocks不会创建的类属性。
下面是我的函数类的样子:(文件路径:src/main/java/com/mycompany/mypackage)

package com.mycompany.mypackage;

@Service
public class MyClass {

  @Value(“${someString}”)
  private String someString;

  public printString() {
    System.out.println(someString);
  }
}

下面是我的测试类的样子:(文件路径:src/test/java/com/mycompany/mypackage)

package com.mycompany.mypackage;

@RunWith(SpringJUnit4ClassRunner.class)
public class MyClassTest {

  @InjectMocks
  MyClass myClass

  @Test
  public testPrintString() {
    myClass.printString()
  }
}

我曾尝试使用@autowired代替@injectmocks来完全示例化myclass bean,但这实际上不会创建myclass的示例,而且每当我尝试在测试中使用'myclass'变量时,都会得到一个空指针异常。
对于我的特定用例,使用构造函数方法不是一个现实的选择。
任何帮助都太棒了!

ogsagwnx

ogsagwnx1#

尝试将其添加到测试类以使用反射设置值:

import org.junit.Before;
import org.springframework.test.util.ReflectionTestUtils;

@Before
public void setup()
{
    ReflectionTestUtils.setField(
            myClass,"someString", 
            "SOME_VALUE", String.class);
}
ds97pgxw

ds97pgxw2#

如果你不想模拟测试,你应该做如下。

// @RunWith(SpringJUnit4ClassRunner.class)
@RunWith(SpringRunner.class)
@SpringBootTest(classes = YourApplication.class) // YourApplication is your spring boot app main class used to import spring context
public class MyClassTest {

//    @InjectMocks
    @Autowired
    MyClass myClass;

    @Test
    public void testPrintString() {
        myClass.printString();
    }
}

相关问题