作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些类似的代码
FooMock.Setup( m => m.Bar( It.Is<BarArg>( x => long_test_x_is_ok(x) ) );
天真地,我认为我可以将其重写为:
var barArg = It.Is<BarArg>( x => long_test_x_is_ok(x) );
FooMock.Setup( m => m.Bar( barArg ) );
但是最小起订量不爱我。有可能做到这一点吗?
同样,我们的一些类名也很长。我想重构对
的调用It.IsAny<AnnoyinglyLongClassNameHere>()
变成更短的东西
var anyAlcnh = It.IsAny<AnnoyinglyLongClassNameHere>;
似乎也不行。
最佳答案
它不起作用的原因是 Setup
实际上正在接收 Expression<Action<IFoo>>
不只是一个Action<IFoo>
.
它从未实际调用 Action
你传入,它所做的是接受表达式,将其拆开并解析每个组件。因此你不能拉出 barArg
因为那会使barArg
表达式解析器的“黑匣子”,不知道变量代表什么。
你能做的最好的就是
//Assuming Bar has the signature "void Bar(BarArg barArg)".
//If it was "Baz Bar(BarArg barArg)" use "Expression<Func<IFoo, Baz>>" instead.
Expression<Action<IFoo>> setup = m => m.Bar(It.Is<BarArg>(x => long_test_x_is_ok(x)));
FooMock.Setup(setup);
IsAny 有同样的问题,但是为此你可以创建一个别名来缩短类名。
//At the top of your file with your other using statements
using ShortName = Some.Namespace.AnnoyinglyLongClassNameHere;
//Down in your unit test
FooMock.Setup(m => m.Bar(It.IsAny<ShortName>());
关于c# - 我可以在 Moq 中重用 It.Any 参数描述符吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29061633/
我是一名优秀的程序员,十分优秀!