试图让我的头脑围绕 asmock 在我的项目中实施一些单元测试。我想测试我的 MainMediator 并且由于在 MainMediator onRegister 调用中创建了一些对象,我认为我应该模拟这些对象。希望一开始是正确的!
我有这样的东西
[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(dispatcher) 时。我可以在 myService 类中看到错误
Error: Previous method IMyService/clientID/get(); requires a return value or an exception to throw
。clientID 恰好是我的第一个属性,因此它被选中。
我认为 StubOptions.NONE 意味着没有属性被存根,或者我的 SetupResult.forCall(myService.clientID) 会修复它,但没有一个。
回答评论中的问题:eventDispatcher,我有:
MyService extends ServiceBase implements IMyService
在哪里ServiceBase extends Actor
我发现我需要 IMyService 中的以下内容才能访问 eventDispatcher。
function get eventDispatcher():IEventDispatcher;
function set eventDispatcher(dispatcher:IEventDispatcher):void;
不太确定这是否正确。现在有点迷茫。
有人可以告诉我哪里出错了吗?谢谢!