2013-07-02 45 views
0

莫克下列情况下,我有下面的类如何使用PowerMock或Easy模拟或或的Mockito所有

public class TestClass{ 
    ParamObject paramObject = null; 

    public TestClass(ParamObject paramObject){ 
     this.paramObject = paramObject; 
    } 

    public String getQuery(String field){ 

     String sql = field + "sometext" + getName(); 
    } 

    private String getName(){ 
     SomeObject obj = new SomeObject(); 
     return obj.getName(); 
    } 

} 

我想嘲笑类的上面GetName方法。构造函数参数在Test类中可用。我该怎么做呢。

@Test(groups = { "UNIT", "CS_RAJAN" }) 
public void TestClass_Unit_Test() throws Exception { 
    ParamObject paramObject = get();//some param object 

    //some way to pass the paramObject to the class and mock the getName() method so that it returns "ABC" 

} 
+2

如果这是你的整个班级,那么问题应该是你为什么要测试它?这是一个永远不会被调用的私有方法。不过,我会说你不应该测试私有方法 - 它们定义了你的类是如何实现的,而不是它的行为方式。你应该针对你对行为进行测试,因为实现可能会随着时间的推移而变化(并且你的测试会因为没有正当理由而开始失败) – DaveH

+0

在我看来,你实际上想要做的就是创建'SomeObject',这样你可以使用一个虚拟的“SomeObject”来测试它的“名字”是否已知。如果您可以确认这会满足您的需求,我会发布详细的答案,介绍如何做到这一点。 –

+0

其实我想测试公共方法getQuery(String field)。我想嘲笑私有方法返回一个文本(比如“ABC”),这样当我调用getQuery(“Hello”)时,我想在测试方法上收到“HellosometextABC”。 SomeObject是从应用程序浏览时正确初始化的Context对象。这是我想测试的复制场景,我确定它是。 – Rajan

回答

0

我找到了解决方案。这是类似这样的测试类

ParamObject paramObject = get();//Some instance 
TestClass t = PowerMock.createPartialMock(
     TestClass.class, "getName", null, paramObject); 

String expected = "ABC"; 

PowerMock.expectPrivate(t, "getName").andReturn(
     expected); 
PowerMock.replay(t); 
相关问题