0

试图让我的头脑围绕 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;

不太确定这是否正确。现在有点迷茫。

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

4

1 回答 1

0

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

除了通过接口抽象你的类并模拟它之外,实际上并没有解决它的方法

于 2013-07-18T11:41:30.520 回答