2016-07-04 77 views
0

如何重写方法内的对象创建?EasyMock - 重写对象创建

public class ClassToTest { 
    public Object testMethod() { 
     ... code ... 
     Object result; 
     try { 
      result = new ClassToMock(someParam).execute(); 
     } catch (Exception e) { 
      // handle error 
     } 

     return result; 
    } 
} 

我的测试如何重写ClassToMock的“execute”方法? EasyMock的代码示例我会很高兴。我想测试“TestMethod的”,是这样的:

@Test 
public void testMethodTest(){ 
    ClassToTest tested = new ClassToTest(); 
    // Mock ClassToMock somehow 
    tested.testMethod(); 
    // Verify results 
} 
+0

对不起厂生产的最后期限... –

+0

没有必要感到遗憾!有时候,只是忘记了这些问题已经得到解答并且可以被接受。也发生在我身上。 – GhostCat

回答

3

简单地说:这不工作。

你不能嘲笑(使用EasyMock,但可以使用像PowerMock(ito)或JMockit框架)。

但更好的方法:使用依赖注入为了将已经创建的对象传递到你的类中进行测试。

为了更准确:如果您的类真的不需要任何其他对象的工作,那么测试将看上去更像

@Test 
public void testFoo() { 
    ClassToTest underTest = new ClassToTest(...) 
    underTest.methodToTest(); 
    assertThat(...) 

换句话说:为了测试你的类,你只需实例化它;然后你调用它的方法;并使用断言来检查它的预期状态。

请参阅here对于我所谈论的内容来说,优秀(尽管有点冗长)的解释。

1

只可能重写方法如果类的方法没有被标记为final

try { 
    ClassToMock mock = new ClassToMock(someParam){ 
     public Object execute(){ //Such that your method is public 
      //If you want to call back to the pure method 
      //super.execute() 

      //Do override things here 
     } 
    }; 
    result = mock.execute(); 
} catch (Exception e) { 
    // handle error 
} 
+0

我想做一个单元测试,以“testMethod”,所以我什么时候打电话? “testMethod”如何使用模拟对象而不是真正的模拟对象?对于基本的东西抱歉。我是一名Java单元测试初学者。 –

+0

您可以使用[JUnit](http://junit.org/junit4/)并在方法的顶部添加'@ Test'注释。 – mob41

+0

“testMethod”如何使用模拟对象而不是真实模型? –

-1

Powermock有可能。使用powermock,你可以嘲笑“新”运营商以及

ClassToMock mock = PowerMock.createMock(ClassToMock.class); 
PowerMock.expectNew(ClassToMock.class, parameterValues).andReturn(mock); 
PowerMock.replayAll(); 

欲了解更多详细信息,请参阅全天候此link