私はユニットスタジオとモックを始めたので、Android Studioでの継続的な統合を設定するように求められました。模擬メソッドが実際の値を返す
私はモキト基盤と仕事を忘れてしまったと感じます。これは私のコードである
@RunWith(MockitoJUnitRunner.class)
public class ExampleUnitTest {
MainActivity classToTest = new MainActivity();
@Mock
ClassIDontWantToTest classToMock;
/**
* Examples found a lot of times on the Internet
* My method is not tested at all
* I think it doesn't make sense to test Mockito but our own methods
* @throws Exception
*/
@Test
public void testMethodIDontWantToTest() throws Exception {
when(classToMock.methodIDontWantToTest()).thenReturn("Mocked result");
assertTrue(classToMock.methodIDontWantToTest().equals("Mocked result"));
}
}
:私は、インターネット上の例のこの種を見つけた
public class MainActivity extends AppCompatActivity {
ClassIDontWantToTest classIWantToMock = new ClassIDontWantToTest();
/**
* Actual Method I want to test
* @return Return value
*/
public String methodIWantToTestButReturnsUnspectedValue() {
// (...) Code to test
return classIWantToMock.methodIDontWantToTest();
}
}
public class ClassIDontWantToTest {
public String methodIDontWantToTest() {
return "Actual result";
}
}
そしてこれは、私はそれを行う必要があります理解する方法です:
@RunWith(MockitoJUnitRunner.class)
public class ExampleUnitTest {
MainActivity classToTest = new MainActivity();
@Mock
ClassIDontWantToTest classToMock;
/**
* Test I want to do and I think it makes sense, but it doesn't work
* @throws Exception
*/
@Test
public void testMethodIWantToTest() throws Exception {
when(classToMock.methodIDontWantToTest()).thenReturn("Mocked result");
assertTrue(classToTest.methodIWantToTestButReturnsUnspectedValue().equals("Mocked result"));
}
}
明らかに私は理解できないことがありますが、私はそれが何であるか分かりません。 誰かが私が間違っている場所を教えてもらえますか?
ありがとうございました!
@RunWith(MockitoJUnitRunner.class)
public class ExampleUnitTest {
@InjectMocks
MainActivity classToTest;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Mock
ClassIDontWantToTest classToMock;
@Test
public void testMethodIWantToTest() throws Exception {
when(classToMock.methodIDontWantToTest()).thenReturn("Mocked result");
String expected = classToTest.methodIWantToTestButReturnsUnspectedValue();
assertEquals(expected, "Mocked result");
}
}
ユニットテスト(JVM)または計測テスト(エミュレータ)ですか?また、 'ClassIDontWantToTest'と' methodIDontWantToTest'は共に公開されており、最終的なものではありません。 –
私が見る限りでは、テストしているクラスにモックオブジェクトを注入していません。これにアプローチする私の好みの方法は、テストするクラスに2番目のコンストラクタを追加し、 'classIWantToMock'の値を渡してから、この2番目のコンストラクタでインスタンス化されたオブジェクトをテストすることです。 2番目のコンストラクタをクラスに追加できない場合、もう1つのアプローチは、@InjectMocksアノテーションをテストの 'classToTest'宣言に置くことですが、それは時にはより淡いこともあります。 –