2013-07-17 1 views
0

Попытка получить мою голову вокруг asmock для реализации некоторых модульных тестов в моем проекте. Я хочу проверить свой MainMediator, и поскольку есть объекты, которые создаются в моем вызове MainMediator onRegister, я думаю, что я должен издеваться над этими объектами. Надеюсь, это правильно для начала!asmock Предыдущий метод требует возвращаемого значения или исключения для throw

У меня есть что-то вроде этого

[Rule] public var includeMocks : IncludeMocksRule = new IncludeMocksRule([ 
    IEventDispatcher, IMyService 
]); 

[Before] 
public function setUp():void { 
    mockRepository = new MockRepository(); 
    mainView = new MainView(); 
    mainMediator = new MainMediator(); 

    dispatcher = IEventDispatcher(mockRepository.createStub(IEventDispatcher, StubOptions.NONE)); 
    myService = IMyService(mockRepository.createStub(IMyService, StubOptions.NONE)); 
    mockRepository.stubEvents(dispatcher); 

    SetupResult.forCall(chatService.clientID) 
       .returnValue(""); 

    mockRepository.replayAll(); 

    mainMediator.eventDispatcher = dispatcher; 
    myService.eventDispatcher = dispatcher; 
    mainMediator.service = myService; 

    .... 

    mainMediator.onRegister(); 
} 

Когда я пошагово испытания и остановок на mockRepository.stubEvents (диспетчер). Я вижу ошибки в классе myService Error: Previous method IMyService/clientID/get(); requires a return value or an exception to throw. clientID просто оказывается моим первым свойством, поэтому его выбирают.

Я думал, что StubOptions.NONE будет означать, что никакие свойства не будут заштрихованы или что мой SetupResult.forCall (myService.clientID) исправит это, но никто этого не сделал.

Отвечая на вопрос в комментариях Re: EventDispatcher, у меня есть:

MyService extends ServiceBase implements IMyService

где ServiceBase extends Actor

я обнаружил, что мне нужно следующее IMyService, чтобы получить доступ к EventDispatcher.

function get eventDispatcher():IEventDispatcher; 
function set eventDispatcher(dispatcher:IEventDispatcher):void; 

Не слишком уверен, что это правильно. Немного путайте сейчас.

Может кто-нибудь, пожалуйста, скажите мне, где я иду не так? Спасибо!

+0

Откуда «myService eventDispatcher»? –

ответ

0

Это обычная проблема при издевательстве конкретных классов, а не интерфейсов: если конструктор вызывает другой метод (или свойство getter), он будет возвращать null, потому что он еще не был насмешкой.

На самом деле не существует способа обойти это, за исключением абстракции своего класса через интерфейс и издеваться над , что.

+0

Спасибо за ваш ответ! К сожалению, я все еще сталкиваюсь с такой же проблемой после насмешивания интерфейса. Я отредактировал свой вопрос выше и добавил некоторую информацию, которая может помочь пролить свет. –

+0

Теперь ваши переменные напечатаны как 'IMyService', но вы все еще передаете' MyService' в 'createStub', поэтому он все еще пытается создать макет конкретного класса. –

+0

Жаль, что это была опечатка с моей стороны. Я действительно передаю IMyService. –