我正在使用Junit 4.8.2。当我使用@RunWith(MockitoJUnitRunner.class)
运行我的测试类并且仅使用@Mock注释模拟时,它似乎没有初始化模拟。但是当我使用静态mock()并摆脱运行器和注释时,我可以看到模拟被初始化了。
@RunWith(MockitoJUnitRunner.class)
public class MyTestClass
{
private static final String DOMAIN = "mock";
@Mock private TransactionManager transactionManager;
@Mock private SearchManager searchManager;
private final filter = new Filter(transactionManager,searchManager, DOMAIN);
@Test
public void myTest()
{
filter.callMethod(); // This throws NPE since transactionManager was null
}
}
我在这里做错了什么?我已经调查了这个Initialising mock objects - MockIto并按照它做了所有事情,但仍然没有运气。
答案 0 :(得分:3)
运行器在实例化类之后处理.flex-box {
display: flex;
flex-direction: column;
}
.flex-box .input-w {
display: flex;
flex-direction: row;
}
注释,因此在@Mock
带注释的方法中移动filter = new Filter(transactionManager,searchManager, DOMAIN);
:
@Before
来自runner doc:
初始化使用
@RunWith(MockitoJUnitRunner.class) public class MyTestClass { private static final String DOMAIN = "mock"; @Mock private TransactionManager transactionManager; @Mock private SearchManager searchManager; private Filter filter; @Before public void setup() throws Exception { filter = new Filter(transactionManager, searchManager, DOMAIN); } @Test public void myTest() throws Exception { filter.callMethod(); // No more NPE } }
注释的模拟,因此不需要明确使用@Mock
。 在每种测试方法之前初始化模拟。
答案 1 :(得分:1)
尝试初始化模拟,为测试类添加设置方法。
您可能还需要在其中移动filter
初始化:
private filter;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
filter = new Filter(transactionManager,searchManager, DOMAIN);
}
答案 2 :(得分:0)
您可以在测试对象上使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="header">
<div id="header-sroll"> <h1>Fixed Header</h1></div>
</div>
。如果使用@InjectMock
,它将使用模拟对象来创建测试对象。</ p>