簡體   English   中英

使用 stream 數據調用最小起訂量驗證方法

[英]moq verify method was called with stream of data

我有一個方法用 stream 調用另一個方法。 我想測試第一種方法中插入的數據是第二種方法中發送的數據。

public MyMessage Parse(byte[] data)
{
    return myDependency.Read(new MemoryStream(data))
}

在我的測試中,我有以下內容

byte [] mockData = { 116, 101, 115, 116};

sut.Parse(mockData);

mockDependency.Verify(x=>x.Read(...));

現在我的問題是,我應該用什么來代替...

我可以做類似(It.IsAny<MemoryStream>())的事情,但這並不能真正驗證它是用給定的數據調用的。

我嘗試了類似It.Is<MemoryStream>(s=>s.Equals(new MemoryStream(data)))但失敗了。

有沒有辦法讓我測試發送到Parse的數據是否與 memory stream 中發送的數據相同以Read

我嘗試了類似It.Is<MemoryStream>(s=>s.Equals(new MemoryStream(data)))但失敗了。

在這種情況下,它可以像

mockDependency.Verify(_ => _.Read(It.Is<MemoryStream>( s => 
    Enumerable.SequenceEqual(s.ToArray(), data))));

通過比較字節 arrays

您還可以嘗試捕獲傳遞的參數,以便在斷言期間可以更好地檢查

例如

// Arrange
byte [] expectedData = { 116, 101, 115, 116 };
byte [] actualData = null;

//...

mockDependency
    .Setup(_ => _.Read(It.IsAny<MemoryStream>()))
    .Callback((MemoryStream ms) => actualData = ms.ToArray())
    .Returns(/* MyMessage here*/)
    .Verifiable();

// Act
sut.Parse(expectedData);

//Assert
mockDependency.Verify(); //verify that setup was invoked as expected
//using FluentAssertions to check data
actualData.Should().NotBeNull()
.And.BeEquivalentTo(expectedData);

請注意, Fluent Assertions用於簡化集合的斷言。

暫無
暫無

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

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