使用数据流调用最小起订量验证方法
moq verify method was called with stream of data
我有一个方法可以使用流调用另一个方法。我想测试第一种方法中插入的数据是否是第二种方法中发送的数据。
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
的数据是否与内存流中发送到 Read
的数据相同?
I tried something like It.Is<MemoryStream>(s=>s.Equals(new MemoryStream(data)))
but that failed.
在这种情况下,它可以像
那样完成
mockDependency.Verify(_ => _.Read(It.Is<MemoryStream>( s =>
Enumerable.SequenceEqual(s.ToArray(), data))));
通过比较字节数组
您也可以尝试捕获传递的参数,以便在断言期间更好地检查它
例如
// 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 用于简化集合的断言。
我有一个方法可以使用流调用另一个方法。我想测试第一种方法中插入的数据是否是第二种方法中发送的数据。
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
的数据是否与内存流中发送到 Read
的数据相同?
I tried something like
It.Is<MemoryStream>(s=>s.Equals(new MemoryStream(data)))
but that failed.
在这种情况下,它可以像
那样完成mockDependency.Verify(_ => _.Read(It.Is<MemoryStream>( s =>
Enumerable.SequenceEqual(s.ToArray(), data))));
通过比较字节数组
您也可以尝试捕获传递的参数,以便在断言期间更好地检查它
例如
// 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 用于简化集合的断言。