如何在junit测试中操作注入的类以返回特定值?

时间:2018-02-08 19:58:20

标签: junit easymock

对于junit / mocking对象,我需要一些指导。

我的课程包括一个计算器,用于确定要开始的工作数量。当我试图在计算器的模拟上设置期望时,我得到了一个N​​ull Pointer Exception,所以我通过setUp方法中的setter将它注入到测试的类中。

@Before
public void setUp() throws Exception {
classUnderTest.setCalculator(mockCalc);

在我的测试中,我使用一些模拟数据在mockCalc上调用了预期的方法,如下所示:

List<Job> myConcurrentJobs = new ArrayList<Job>();
List<Job> jobs = new ArrayList<Job>();

myConcurrentJobs = Arrays.asList(mockWorkflowJob);
jobs = Arrays.asList(mockWorkflowJob);
result = Arrays.asList(mockWorkflowJob);

对方法的实际调用如下:

EasyMock.expect(mockcalc.calculateJobs(jobs, myConcurrentJobs,mockDS)).andReturn(1);

当我运行该方法时,返回的值为零,这否定了我的测试。这很可能是预期的,因为模拟列表不适合calculateJobs方法的逻辑,但模拟生活和现实生活之间的关系对我来说仍然不清楚。我试图在calculateJobs方法中设置断点,以确定是否/哪里的事情变坏但是它们没有在Eclipse中被击中,这可能是也可能不是由于注入。请协助。

1 个答案:

答案 0 :(得分:0)

calculateJobs()方法的返回类型是什么。它是int(或其他原始类型)?任何模拟框架如何工作,当你期望一个方法具有某个参数时,如果在运行测试时,没有找到与你期望的匹配,那么返回返回类型的默认值。例如。如果你的返回类型是int,它将返回0,如果它的String / Object,它将返回null。

当你期望一个带参数的方法时,期望的参数和实际调用的参数必须是 EQUALS .From Equals,我的意思是,它将使用equals方法进行比较价值观的平等。所以如果你传递一个字符串&#34; SOMETHING&#34;并期望&#34; SOMETHING&#34;。

在你的方法中,你传递3个参数,即jobs,myConcurrentJobs,mockDS。确保你期待什么,实际上所谓的是满足&#34; EQUALS&#34;条件然后只返回1,否则返回类型的默认值将返回,即0(假设你有int返回类型)

请分享整个测试和实际代码,将能够完全帮助。