簡體   English   中英

編寫方法的NUnit測試用例

[英]Writing NUnit Test Cases for method

我是Nunit的新手,請幫助編寫一個測試用例。 這是我的課

    public CommandModule(ICommandFetcher fetcher,ICommandBus commandBus)
    {

        //Get["/"] = p =>
        //{z
        //    return Response.AsText((string)Request.Form.Username);
        //};

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

我想測試檢查此方法

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

謝謝!

我按照以下方式嘗試

 [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 browser = new Browser(with =>
        {
            with.Module<CommandModule>();
            with.Dependency<ICommandBus>(fakeCommand);

        });

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

        A.CallTo(() => fakeCommand.Send(rCommand,envelope.MetaData)).MustHaveHappened();

但是A.CallTo(() => fakeCommand.Send(rCommand,envelope.MetaData)).MustHaveHappened(); 它在rcommand值中存在某種錯誤

聽起來您正在尋找顯式測試在執行代碼時是否調用了ICommandBus.Send方法。

一種方法是模擬ICommandBus依賴關系。 即,插入一個實現ICommandBus的模擬對象,該對象能夠檢測是否使用正確的參數值調用了該方法。

如果采用這種方法,通常可以使用模擬框架(例如Moq或RhinoMocks)來進行。

為了簡要說明如何使用模擬,我將展示如何通過自己明確實現一個模擬對象對象(記錄方法調用)並隨后對其進行測試來實現此目的。

例如

MockCommandBus : ICommandBus
{
    ICommand PassedCommand { get; set; }
    MetaData PassedMetaData { get; set; }

    public void Send(ICommand command, MetaData metaData)
    {
        this.PassedCommand = command;
        this.PassedMetaData = metaData;
    }    
}

然后您的測試用例將如下所示:

[TestCase]
public void PostSendsCommandOnBus()
{
    // ARRANGE
    var mockCommandBus = new MockCommandBus();

    ICommand expectedCommand = <whatever you expect>;
    MetaData expectedMetaData = <whatever you expect>;

    // Code to construct your CommandModule with mockCommandBus.

    // ACT
    // Code to invoke the method being tested.

    // ASSERT
    Assert.AreEqual(expectedCommand, mockCommandBus.PassedCommand);
    Assert.AreEqual(expectedMetaData , mockCommandBus.PassedMetaData );

}

警告:

請注意,這只是一種恰好符合您在此處要求的單元測試方法。 過度使用模擬來測試與依賴項之間的顯式交互,這可能導致開發非常脆弱的測試套件,這些套件正在測試基礎實現而不是系統的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM