2017-02-22 49 views
0

我想为我的java函数编写测试用例。我的功能是以下类型使用junit测试函数时忽略代码

public static String parse33_05_x_Data(String message, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    FileManager.getInstance().WriteDataToFile(transaction); 
    return returnValue; 
} 

的东西,但是在上面的代码中,我想以某种方式忽略/模拟FileManager.getInstance().WriteDataToFile(transaction);,因为它是给一个例外。而不对上述函数本身做任何代码更改。

无论需要什么变化都应该发生在我的Test class里面。

是否有可能做到这样的事情?

提前致谢!

回答

0

您应该将fileManager实例作为参数。然后可以模拟这个实例。

public static String parse33_05_x_Data(String message, FileManager fileManager, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    // mock doesnt write 
    fileManager.WriteDataToFile(transaction); 
    return returnValue; 
} 

或者,(你写你不想改变方法),可以使用PowerMockito嘲笑静态方法FileManager.getInstance(),但我不会推荐,因为在我看来,这是一个代码闻。

0

您可以使用名为Mockito的测试框架将参数“模拟”到某个方法。这将使创建一个“不做任何事情”的FileManager成为可能。

你应该重构文件管理器的参数,使其mockable

public static String parse33_05_x_Data(String message, Transaction transaction){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    FileManager.getInstance().WriteDataToFile(transaction); 
    return returnValue; 
} 

到:

public static String parse33_05_x_Data(String message, Transaction transaction, FileManager fileManager){ 
    String returnValue=""; 
    /** 
    *Some Java code which I actually want to test. 
    * 
    **/ 
    //Writing the transaction to the file. 
    fileManager.WriteDataToFile(transaction); 
    return returnValue; 
} 

然后可以使用的Mockito嘲笑你的JUnit测试案例的对象是这样的:

@Test 
public void test1() { 
     // create mock 
     FileManager mockedFileManager = Mockito.mock(FileManager.class); 

     // define return value for method 
     when(mockedFileManager.WriteDataToFile()).thenReturn("something"); 


     // use mock in test.... 
     assertEquals(MyObj.parse33_05_x_Data("message") new Transaction(), mockedFileManager), "expected value"); 
}