试着在我的项目中实现一些单元测试。我想测试我的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(调度程序)时。我可以在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;
不太确定这是否正确。现在有点困惑。
有人可以告诉我哪里出错了吗? 谢谢!
答案 0 :(得分:0)
这是模拟具体类而不是接口时的常见问题:如果构造函数调用另一个方法(或属性getter),它将返回null,因为它尚未被模拟。
除了通过界面抽象你的类并模拟 之外,没有任何方法可以解决它。