当前位置: 首页 > 知识库问答 >
问题:

使用InjectMocks错误的PowerMockito

符鸿光
2023-03-14

我有一个非常复杂的类来编写Junit测试用例。我决定使用PowerMockito,因为要为其运行测试的类具有构造函数初始化。

我的主课是这样的:

public class MainClass extends BaseClass{

MainClass(SomeClass class){
    super(class);
}

public void methodToBeTested(){
some code here
}

..few other methods which I am not going to test.
}
@RunWith(PowerMockRunner.class)
public class TestClass{

@Mock
OtherClassUsedInMainClass mock1;

@Mock
OtherClassUsedInMainClass mock2;

@InjectMocks
MainClass mainClass;

@Before
public void setUp() throws Exception{
    MockitoAnnotations.initMocks(this);
    PowerMockito.whenNew(MainClass.class).withArguments(Mockito.any(SomeClass.class))
            .thenReturn(mainClass);)
}

@Test
public void testMethodtobeTested(){
    ...I am using the other objects to mock data and test if this method works fine

    mainClass.methodtobeTested();
    \\This method will increment a value. I am just asserting if that value is right. 
    Assert.assertEquals(mainClass.checkCount(),RequiredCount)

}

}
org.mockito.exceptions.base.MockitoException: 
Cannot instantiate @InjectMocks field named 'mainClass' of type 'class com.main.MainClass'.
You haven't provided the instance at field declaration so I tried to construct the instance.
However the constructor or the initialization block threw an exception : null

Caused by: java.lang.NullPointerException
This null pointer exception is thrown from a the constructor of the BaseClass when it tries to initialize another class.

共有1个答案

司允晨
2023-03-14

这个问题解释了@mock@injectmocks之间的区别:

@mock创建一个mock。@injectmocks创建类的实例,并将使用@mock(或@spy)注释创建的mocks注入到该实例中。

MainClass构造函数需要一个SomeClass参数,但是没有任何模拟。

您的代码应该类似于:

@RunWith(PowerMockRunner.class)
public class TestClass{

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    SomeClass mock1;

    @InjectMocks
    MainClass mainClass;

    @Before
    public void setUp() throws Exception{
    ...
 类似资料:
  • 这是一个服务类的服务层测试,但是我在类上使用@injectmocks时遇到了一个错误,测试pom是使用Spring Boot的Spring测试的2.2.4版本。获取误用.InjectMocksException的错误 //错误 injectMocksException:无法实例化类型为“class com.scrapper.jobmanager.service.jobmanagerService”

  • 问题内容: 我目前正在研究Mockito框架,并且已经使用Mockito创建了一些测试用例。但后来我读到的不是调用模拟( SomeClass的 的.class)我可以使用和-我需要做的唯一一件事情就是我的注释测试类或使用的方法。 但这不起作用-似乎不会起作用!这是我的2个代码修订-一个使用注释,另一个不使用注释。 我究竟做错了什么? 正如我所说-这项工作很棒。但是以下内容不会: 这是课程: 我想念

  • 我有一个Spring boot项目,它有一套单元测试,使用mockito的@InjectMock来实例化正在测试的类,并将可能存在的任何Mock注入其中。 换句话说,如果我有这个 @InjectMocks MyClass myClass; 那我就不需要 MyClass MyClass=新的MyClass() 或@Autowired MyClass MyClass; 到目前为止,这种设置运行良好。

  • 当使用@InjectMocks时,它会自动尝试按照以下顺序进行注入:构造器、设置器、字段。它通过检查类型来检查是否可以在这些地方中注入,然后在有多种类型的可能性时命名。这对我来说不太好用,因为我的模拟映射锁实际上是通过它的setter注入到dontMockMe中的。我无法编辑此抽象类。有什么办法让我绕过塞特注射吗?提前谢谢!

  • 我有一个简单的rails应用程序。它包含两个模型。员工和员工经理。我基本上希望一个员工有一个或多个经理(其他员工),我希望能够像您期望的那样查询这些经理。 这是我的员工: 而经理模式: 这在我看来没问题,但是当我去查询员工和经理时,员工Rails使用相同的列(employee_id=X): irb(主):008:0 如何修复最后一个查询?它应该使用manager_id而不是employee_id!

  • 问题内容: 我在ubuntu上使用npm v1.0.104 / node 0.6.12-在尝试通过npm安装任何新模块时收到以下复制的错误(我之前使用http而不是https测试了socket.io,但我想知道是否可以导致npm / unsigned证书出现问题)。一旦npm尝试解析“ https://registry.npmjs.org ” URL,该错误就会弹出。无论如何,我可以忽略该错误,或