djUnitバージョン0.5.0で、メソッド実行時のパラメータによって返却値を変更できる仕組みを実装しました。
addReturnValueなどで、返却値に「IReturnValueProviderをimplementしたクラスのオブジェクト」を設定することで、この仕組みを利用できます。
IReturnValueProviderを使用したサンプルです。
Messagesクラス
public class Messages {
public String getMessage(String message, int index) { return message + "[" + index + "]"; }
} |
MessagesTestクラス
import jp.co.dgic.testing.common.virtualmock.IReturnValueProvider; import jp.co.dgic.testing.framework.DJUnitTestCase;
public class MessagesTest extends DJUnitTestCase {
private class GetMessageReturnValueProvider implements IReturnValueProvider {
public Object createReturnValue(Object[] args) throws Throwable { String message = (String) args[0]; int index = ((Integer) args[1]).intValue(); if (index == 3) { return "Index is 3."; } return "Mock return value."; } }
public void testGetMessage001() { System.out.println("[testGetMessage001]");
Messages messages = new Messages(); System.out.println(messages.getMessage("Hello", 0)); }
public void testGetMessage002() { System.out.println("[testGetMessage002]"); setReturnValueAtAllTimes("Messages", "getMessage", new GetMessageReturnValueProvider());
Messages messages = new Messages(); System.out.println(messages.getMessage("Hello", 0)); System.out.println(messages.getMessage("Hello", 1)); System.out.println(messages.getMessage("Hello", 2)); System.out.println(messages.getMessage("Hello", 3)); System.out.println(messages.getMessage("Hello", 4)); System.out.println(messages.getMessage("Hello", 5)); } } |
IReturnValueProviderを実装したGetMessageReturnValueProviderクラスを定義し、2番目のテストメソッドでは、そのインスタンスをsetReturnValueAtAllTimesでセットしています。
[testGetMessage001]
Hello[0]
[testGetMessage002]
Mock return value.
Mock return value.
Mock return value.
Index is 3.
Mock return value.
Mock return value.