非常に単純な Mockito 実行 JUnit テストとクラスでは、Java 1.6.0_32 と Java 1.7.0_04 でテストを実行すると異なる出力が表示され、なぜこれが発生するのかを理解したいと考えています。ある種の消去が行われていると思われますが、決定的な答えが欲しいです。
コマンドラインから実行する方法のサンプルコードと手順は次のとおりです。
FooServiceTest.java
import org.junit.*;
import org.junit.runner.*;
import org.mockito.*;
import org.mockito.runners.MockitoJUnitRunner;
import static org.mockito.Mockito.*;
import java.util.*;
@RunWith(MockitoJUnitRunner.class)
public class FooServiceTest {
@Mock Map<String, String> mockStringString;
@Mock Map<String, Integer> mockStringInteger;
@InjectMocks FooService fooService;
public static void main(String[] args) {
new JUnitCore().run(FooServiceTest.class);
}
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void checkInjection() {
when(mockStringString.get("foo")).thenReturn("bar");
fooService.println();
}
}
FooService.java
import java.util.*;
public class FooService {
private Map<String, String> stringString = new HashMap<String, String>();
private Map<String, Integer> stringInteger = new HashMap<String, Integer>();
public void println() {
System.out.println(stringString.get("foo") + " " + stringInteger);
}
}
この例をコンパイルして実行するには:
- 上記をファイルに保存します
- junit.4.10.jarとmockito-all-1.9.0.jarをダウンロードして同じディレクトリに配置します。
- JDKを含むようにPATHを設定します
- でコンパイル
javac -cp junit-4.10.jar;mockito-all-1.9.0.jar *.java
- で実行
java -cp .;junit-4.10.jar;mockito-all-1.9.0.jar FooServiceTest
上記の出力はnull {}
、@InjectMocksフィールド インジェクションが両方ともタイプ Map であるため、タイプを正しく解決できないためだと思います。これは正しいですか?
モック名の 1 つをクラスのフィールドと一致するように変更すると、Mockito が一致を検出できるようになります。たとえば、
@Mock Map<String, Integer> mockStringInteger;
に
@Mock Map<String, Integer> stringInteger;
次に、Java 1.6.0_32でコンパイル/実行すると(IMHOが予想される)出力bar stringInteger
が得られますが、1.7.0_04ではnull stringInteger
.
これを実行する方法は次のとおりです(Windows 7のコマンドラインから):
E:\src\mockito-test>set PATH="C:\Program Files (x86)\Java\jdk1.6.0_32\bin"
E:\src\mockito-test>javac -cp junit-4.10.jar;mockito-all-1.9.0.jar *.java
E:\src\mockito-test>java -cp .;junit-4.10.jar;mockito-all-1.9.0.jar FooServiceTest
bar stringInteger
E:\src\mockito-test>set PATH="C:\Program Files (x86)\Java\jdk1.7.0_04\bin"
E:\src\mockito-test>javac -cp junit-4.10.jar;mockito-all-1.9.0.jar *.java
E:\src\mockito-test>java -cp .;junit-4.10.jar;mockito-all-1.9.0.jar FooServiceTest
null stringInteger