我有一个大多数工作单元测试,它检查一个方法被调用,它工作正常。但是,我想检查传递给该方法的参数。使用Verify
我可以检查是否传递了一组特定的参数,但如果没有传递这些参数并且测试失败,是否有办法查看实际传递给方法的内容?
示例:
sut.Setup(x => x.MyMethod(It.IsAny<myClass>()).Verifiable();
sut.Object.DoAThing();
sut.Verify(x => x.MyMethod(It.Is<myClass>(v => v.thing == 1)));
在我的测试中,这将失败(v.thing
将不是1),但我想知道的是,v.thing
设置为什么?我想知道,因为我发现这种反馈在调试代码和单元测试时非常有用。
我得到的错误只是说从未调用过x.MyMethod(带有那些预期的参数)。
有解决方案吗?我错过了一些明显的东西吗
说明我的观点的最小例子:
public class myClass
{
public struct myStruct {
public int thing;
}
public virtual void MyMethod(myStruct x )
{
// Code goes here
}
}
public class sutClass
{
public myClass target = new myClass();
public void DoAThing()
{
myClass.myStruct toBePassed = new myClass.myStruct { thing = 8 };
target.MyMethod(toBePassed);
}
}
[TestMethod]
public void Test1()
{
Mock<myClass> mMyClass = new Mock<myClass>();
sutClass sut = new sutClass();
sut.target = mMyClass.Object;
mMyClass.Setup(x => x.MyMethod(It.IsAny<myClass.myStruct>())).Verifiable();
sut.DoAThing();
mMyClass.Verify(x => x.MyMethod(It.Is<myClass.myStruct>(v => v.thing == 1)));
}
上述简单测试显然会失败。
Expected invocation on the mock at least once, but was never performed: x => x.MyMethod(It.Is<myStruct>(v => v.thing == 1))
我希望看到的是WAS传递给MyMethod
的输出结果是什么是预期和实际发生的差异。很像Assert.AreEqual(expected, actual)
会回来。 (例如,期望的字符串和实际的字符串)。
答案 0 :(得分:2)
您可以在模拟设置中实现回调:
foreach($picture in (get-childitem d:\test)){
Rename-Item $picture.fullname
-NewName (($picture.name -replace " ", "_") +$count+$picture.Extension)
此处将值设置为passedValue并打印到控制台