我有一个非常复杂的类来编写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.
这个问题解释了@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,该错误就会弹出。无论如何,我可以忽略该错误,或