0

ゲッター/セッターなしでプロパティをパブリックとして公開する、誰かによって書かれたクラスがあります。

Android モッキング フレームワークを使用して、このクラスをモックしたいと思います。class_under_test を変更したくありません (必要でない限り)。私はそれが悪いプログラミング慣行であることを知っていますが、次のようなプロパティをモックする方法はありますか

AndroidMock.expect(myMockClass.name).andReturn('Scott');

テストケースを実行すると例外が発生します:

java.lang.IllegalStateException: no last call on a mock available
at org.easymock.EasyMock.getControlForLastCall(EasyMock.java:174)
at org.easymock.EasyMock.expect(EasyMock.java:156)
at com.google.android.testing.mocking.AndroidMock.expect(AndroidMock.java:264)
at com.akshat.test.TestPerson.testGetName(TestPerson.java:41)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
4

2 に答える 2

0

なぜこのクラスをまったくモックしたいのですか? 単純な動作 (つまり、フィールド) だけの場合は、クラスのフィールドをそのまま使用できます。

たとえば、これをスタブとして設定する場合は、テスト セットアップで次のようにします。

DependedOnClass dependedOnObject = new DependedOnClass();
dependedOnObject.name = "Scott";
objectUnderTest.dependedOnObject = dependedOnObject;    // inject the depended on object

または、これをモックとして設定する場合は、アサーションでこれを行います。

assertEquals("Scott", dependedOnObject.name);
于 2013-03-01T16:43:01.980 に答える