asmock上一个方法需要返回值或抛出异常

时间:2013-07-17 15:08:06

标签: flex unit-testing 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(调度程序)时。我可以在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;

不太确定这是否正确。现在有点困惑。

有人可以告诉我哪里出错了吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

这是模拟具体类而不是接口时的常见问题:如果构造函数调用另一个方法(或属性getter),它将返回null,因为它尚未被模拟。

除了通过界面抽象你的类并模拟 之外,没有任何方法可以解决它。