没有使用 mockito 的依赖项注入
No dependencies injection using mockito
我正在尝试编写 Mockito 测试,不幸的是出了点问题。
我的class如下:
我的测试class:
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
public class TestClass {
@Nested
public class testingPersonClass{
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
@Test
public void tesOne(){
System.out.println("personOne "+personOne.toString());
}
}
}
class Person
:
public class Person {
String name;
int age;
Hobbie hobbie;
Person(String name, int age){
this.age=age;
this.name=name;
}
//getters and setters
@Override
public String toString() {
return this.name+" "+this.age+" "+ this.hobbie.toString();
}
}
class Hobbie
:
public class Hobbie {
String hobbie;
public Hobbie( String hobbie ) {
this.hobbie = hobbie;
}
@Override
public String toString() {
return this.hobbie;
}
}
我得到一个
java.lang.NullPointerException,
因为hobbie
对象还没有注入到personOne
对象中
我该如何解决?
我的 Pom 依赖项:
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
</dependencies>
您应该使用以下选项之一在单元测试中初始化 Mockito 模拟:
选项 1:在 @BeforeEach
(@Before
在 JUnit 4 中)方法
package Whosebug;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class TestClass {
@Nested
public class testingPersonClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
@BeforeEach
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testOne() {
System.out.println("personOne " + personOne.toString());
}
}
}
选项 2:使用 @ExtendWith(MockitoExtension.class)
(JUnit 4 中的 @RunWith(MockitoJUnitRunner.class)
)
注释您的测试 class
对于此方法,您必须将以下依赖项添加到 pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>2.23.0</version>
<scope>test</scope>
</dependency>
请注意,我已经注释掉了 init
方法。
package Whosebug;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class TestClass {
@Nested
public class testingPersonClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
/*
@BeforeEach
public void init() {
MockitoAnnotations.initMocks(this);
}
*/
@Test
public void testOne() {
System.out.println("personOne " + personOne.toString());
}
}
}
有用的链接
您会发现这些文章很有帮助:
试试这个,对我有用
你必须将 hobbie 设置为 personOne 才能 link 他们,在你的情况下 hobbie 和 personOne 不是 linked
@RunWith(MockitoJUnitRunner.class)
public class TestClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Autowired
public Hobbie hobbie = new Hobbie("Sport");
@Test
public void tesOne(){
personOne.setHobbie(hobbie);
System.out.println(personOne.toString());
Assert.assertEquals("zakzak 37 Sport",personOne.toString() );
}
}
我正在尝试编写 Mockito 测试,不幸的是出了点问题。 我的class如下:
我的测试class:
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
public class TestClass {
@Nested
public class testingPersonClass{
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
@Test
public void tesOne(){
System.out.println("personOne "+personOne.toString());
}
}
}
class Person
:
public class Person {
String name;
int age;
Hobbie hobbie;
Person(String name, int age){
this.age=age;
this.name=name;
}
//getters and setters
@Override
public String toString() {
return this.name+" "+this.age+" "+ this.hobbie.toString();
}
}
class Hobbie
:
public class Hobbie {
String hobbie;
public Hobbie( String hobbie ) {
this.hobbie = hobbie;
}
@Override
public String toString() {
return this.hobbie;
}
}
我得到一个
java.lang.NullPointerException,
因为hobbie
对象还没有注入到personOne
对象中
我该如何解决?
我的 Pom 依赖项:
<dependencies>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>2.23.4</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.1.0</version>
<scope>test</scope>
</dependency>
</dependencies>
您应该使用以下选项之一在单元测试中初始化 Mockito 模拟:
选项 1:在 @BeforeEach
(@Before
在 JUnit 4 中)方法
package Whosebug;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
public class TestClass {
@Nested
public class testingPersonClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
@BeforeEach
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testOne() {
System.out.println("personOne " + personOne.toString());
}
}
}
选项 2:使用 @ExtendWith(MockitoExtension.class)
(JUnit 4 中的 @RunWith(MockitoJUnitRunner.class)
)
注释您的测试 class
对于此方法,您必须将以下依赖项添加到 pom.xml
:
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>2.23.0</version>
<scope>test</scope>
</dependency>
请注意,我已经注释掉了 init
方法。
package Whosebug;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
@ExtendWith(MockitoExtension.class)
public class TestClass {
@Nested
public class testingPersonClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Mock
public Hobbie hobbie = new Hobbie("Sport");
/*
@BeforeEach
public void init() {
MockitoAnnotations.initMocks(this);
}
*/
@Test
public void testOne() {
System.out.println("personOne " + personOne.toString());
}
}
}
有用的链接
您会发现这些文章很有帮助:
试试这个,对我有用
你必须将 hobbie 设置为 personOne 才能 link 他们,在你的情况下 hobbie 和 personOne 不是 linked
@RunWith(MockitoJUnitRunner.class)
public class TestClass {
@InjectMocks
public Person personOne = new Person("zakzak", 37);
@Autowired
public Hobbie hobbie = new Hobbie("Sport");
@Test
public void tesOne(){
personOne.setHobbie(hobbie);
System.out.println(personOne.toString());
Assert.assertEquals("zakzak 37 Sport",personOne.toString() );
}
}