2010-06-03 95 views
1

我有以下代碼:JMockit返回集合

public void someMethod() { 
    Set<Foo> fooSet = bar.getFoos(); 

    for(Foo foo: fooSet) { 
     foo.doSomething(); 
    } 
} 

,我要測試的這款使用JMockit但我不確定如何獲得返回某種類型和尺寸的集合。

當我嘗試將foo添加到一組foos時,以下針對我的代碼的測試會針對哈希碼拋出空指針異常。

@Test 
public void someTestMethod() 
{ 
    new Expectations() 
    { 
     @Mocked Bar bar; 
     @Mocked Foo foo; 


     Set<Foo> foos = new HashSet<Foo>(); 
     foos.add(foo); 

     bar.getFoos(); returns(foos); 
     foo.doSomething(); 
    }; 

    new SomeClass().someMethod(); 
} 

應該怎麼做?

回答

3

我不完全知道如何回答你的問題,因爲我不知道你想考什麼,但我相信你想是這樣的:

@Test 
public void someTestMethod(@Mocked(methods="getFoos")final Bar mockedBar 
          @Mocked(methods="doSomething")final Foo mockedFoo { 

    final Set<Foo> foos = new HashSet<Foo>(); 
    foos.add(new Foo()); 

    new Expectations() { 
     { 
     mockedBar.getFoos(); returns(foos); 
     mockedFoo.doSomething(); 
     } 
    }; 

    new SomeClass().someMethod(); 
} 

利用這一點,JMockit要戲弄撥打getFoos並返回設置foos。如果你看看我傳入的參數,我正在對Bar和Foo類進行部分模擬(我只是模擬了對getFoos和doSomething方法的調用)。我也注意到你在new Expectations區塊中缺少一組大括號,所以這肯定會給你帶來一些問題。另一個需要注意的問題是,如果您在Set foos中放入多個對象,而不是NonStrictExpectations,那麼使用Expectations會導致錯誤,因爲它只需要致電doSomething。如果您創建了一個測試用例,其中foos中有多個對象,則可以使用NonStrictExpectations或使用minTimes和maxTimes指定調用計數約束條件