0
public CommandModule(ICommandFetcher fetcher,ICommandBus commandBus)
    {
        Post["/"] = parameters =>
        {
            var commandRequest = this.Bind<MessageEnvelope>();
            var command = fetcher.FetchFrom(commandRequest);
            commandBus.Send((ICommand)command, commandRequest.MetaData);
            return HttpStatusCode.OK;
        };
    }

错误-->无法将“Castle.Proxies.ObjectProxy_2”类型的对象转换为“Vetserve.Messages.Shared.ICommand”类型。

在 commandBus.Send((ICommand)command, commandRequest.MetaData); 线

嗨,当我尝试使用 nunit test 进行测试时,此方法有先前的错误,我该如何解决

这是我的测试课

 [Test]
    public void whern_reseiving_command_it_sent_to_the_command_bus()
    {
        var rCommand = new DummyCommand() {SomeProp = 2};
        var serializedCommand = JsonConvert.SerializeObject(rCommand);

        var envelope = new MessageEnvelope()
        {
            MetaData = new MetaData() {MessageType = "DummyCommand", MessageTypeVersion = 1},
            MessageData = serializedCommand
        };
        var fakeCommand = A.Fake<ICommandBus>();
         var fakeCxxommand = A.Fake<ICommandFetcher>();
        var browser = new Browser(with =>
        {
            with.Module<CommandModule>();
            with.Dependency<ICommandBus>(fakeCommand);
            with.Dependency<ICommandFetcher>(fakeCxxommand);
        });

        var result = browser.Post("/", with =>
        {
            with.HttpRequest();
            with.JsonBody(envelope);
        });

        A.CallTo(() => fakeCommand.Send(A<ICommand>.Ignored , envelope.MetaData)).MustHaveHappened();
       // A.CallTo(() => fakeCommand.Send(A<ICommand>.Ignored, A<MetaData>._)).MustHaveHappened();
    }
4

1 回答 1

0
[Test]
    public void whern_reseiving_command_it_sent_to_the_command_bus()
    {
        var rCommand = new DummyCommand() {SomeProp = 2};
        var serializedCommand = JsonConvert.SerializeObject(rCommand);

        var envelope = new MessageEnvelope()
        {
            MetaData = new MetaData{MessageType = "DummyCommand", MessageTypeVersion = 1},
            MessageData = serializedCommand
        };
        var fakeCommand = A.Fake<ICommandBus>();
        var fakeCommandFetcher = A.Fake<ICommandFetcher>();
        A.CallTo(()=> fakeCommandFetcher.FetchFrom(A<MessageEnvelope>._)).Returns(rCommand);
        var browser = new Browser(with =>
        {
            with.Module<CommandModule>();
            with.Dependency<ICommandBus>(fakeCommand);
            with.Dependency<ICommandFetcher>(fakeCommandFetcher);
        });

        var result = browser.Post("/", with =>
        {
            with.HttpRequest();
            with.JsonBody(envelope);
        });

        A.CallTo(() => fakeCommand.Send(rCommand,A<MetaData>.That.Matches(m =>m.ContextInfo == envelope.MetaData.ContextInfo && m.MessageType == envelope.MetaData.MessageType))).MustHaveHappened();

}

这是我的新测试方法,它工作正常。以前的错误是由于从方法中获取错误类型而发生的

 public interface ICommandFetcher
{
    Object FetchFrom(MessageEnvelope messageEnvelope);
}

我把它改成

 public interface ICommandFetcher
{
    ICommand FetchFrom(MessageEnvelope messageEnvelope);
}

现在它的工作。

于 2013-11-29T04:58:55.640 回答