2012-06-06 2 views
0

У меня есть класс, написанный кем-то, который предоставляет его свойства как общедоступные без геттеров/сеттеров.Mocking class properties Java/Android

Теперь я хочу издеваться над этим классом, используя флэш-память Android Mocking. Я не хочу изменять class_under_test (если это необходимо). Я знаю его плохую практику программирования, но есть ли способ издеваться над такими свойствами, как

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

я получаю исключение, когда я бегу TestCase:

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) 
+0

«У меня есть класс, написанный кем-то, который предоставляет его свойства как общедоступные без геттеров/сеттеров». Я думаю, вы имеете в виду поля, а не свойства. Свойство обычно представляет собой комбинацию поля, получателя и сеттера. Google «свойство поля java» (без кавычек) для более подробной информации. – apollodude217

ответ

0

Почему вы хотите, чтобы дразнить этот класс вообще? Если единственное поведение тривиально (т. Е. Поля), то вы можете использовать поля класса так же, как и они.

Например, если устанавливать это вверх, как пень, сделать это в тестовой конфигурации:

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

или их настройке, так как макет, а затем сделать это в ваших утверждений:

assertEquals("Scott", dependedOnObject.name); 
0

создать макет объекта для класса и присвоить значение переменной свойств.

Mock mock = Mock.create (ClassName.class); mock.property = значение;