[英]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.