我想要一個單元測試來驗證以正確順序發生的兩個函數調用。在本例中,第一個函數對文件進行加密並將其保存到文件系統,第二個函數將加密文件發送到第三方處理器(通過FTP)。在單元測試中驗證函數調用順序
我使用NSubstitute作爲模擬框架和FluentAssertions來幫助進行測試驗證。這看起來並不像你可以用NSubstitute開箱即可實現的。
public void SendUploadToProcessor(Stream stream, string filename)
{
var encryptedFilename = FilenameBuilder.BuildEncryptedFilename(filename);
FileEncrypter.Encrypt(stream, filename, encryptedFilename);
FileTransferProxy.SendUpload(encryptedFilename);
}
[TestMethod, TestCategory("BVT")]
public void TheEncryptedFileIsSent()
{
var stream = new MemoryStream();
var filename = Fixture.Create<string>();
var encryptedFilename = Fixture.Create<string>();
FilenameBuilder
.BuildEncryptedFilename(Arg.Any<string>())
.Returns(encryptedFilename);
Sut.SendUploadToProcessor(stream, filename);
// Something here to verify FileEncrypter.Encrypt() gets called first
FileTransferProxy
.Received()
.SendUpload(encryptedFilename);
}
謝謝大衛。我忘記了When-Do構造,這正是我所需要的。 NSubstitute.Experimental命名空間在NuGet包中不可用,我將如何獲得包含該命名空間的NSubstitute版本? –
NuGet版本有它(它不是一個單獨的DLL,只是使用'使用NSubstitute.Experimental')。它是在v1.5.0中引入的(當前版本是v1.6.0)。 –
我嘗試在最初使用聲明中放入,並且由於某些原因未能識別。它正在工作。我在討論組留下了一些反饋意見。謝謝! –