Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置和验证中具有相同参数的最小起订量_C#_Moq - Fatal编程技术网

C# 设置和验证中具有相同参数的最小起订量

C# 设置和验证中具有相同参数的最小起订量,c#,moq,C#,Moq,通常我在Setup和Verify中编写相同的参数表达式。有没有办法参考他们 我写的是: var mock = new Moq<IFoo>(); mock.Setup(m => m.MyMethod(It.Is.Any<string>()); ... mock.Verify(m => m.MyMethod(It.Is.Any<string>()), Times.Once); 您可以创建保存表达式的变量,以便可以重用它: Expression<

通常我在
Setup
Verify
中编写相同的参数表达式。有没有办法参考他们


我写的是:

var mock = new Moq<IFoo>();
mock.Setup(m => m.MyMethod(It.Is.Any<string>());
...
mock.Verify(m => m.MyMethod(It.Is.Any<string>()), Times.Once);

您可以创建保存表达式的变量,以便可以重用它:

Expression<Action<IFoo>> expression = x => x.MyMethod(It.Is.Any<string>());

var mock = new Moq<IFoo>();
mock.Setup(expression);
...
mock.Verify(expression, Times.Once);
Expression=x=>x.MyMethod(It.Is.Any());
var mock=新的最小起订量();
模拟设置(表达式);
...
模拟验证(表达式、次数、一次);

在这种情况下,您可以使用
可验证的
,那么您根本不需要在
验证
中指定参数。它将验证是否调用了特定的可验证
设置

var mock = new Moq<IFoo>();
mock.Setup(m => m.MyMethod(It.Is.Any<string>()).Verifiable();
...
mock.Verify();

结果如何?测试将失败,因为
验证
将在对象更改后计算表达式。如果使用的是
Verify
,则调用将在调用时捕获。不过,这只是一个不应该经常出现的展示:)

供未来读者使用:如果您想执行
mock.Setup(expression.Returns(“任意”)使表达式成为
表达式
var mock = new Moq<IFoo>();
mock.Setup(m => m.MyMethod(It.Is.Any<string>()).Verifiable();
...
mock.Verify();
public class Example
{
    public bool IsValid { get; set; }
}

public interface IExample
{
    bool Do(Example e);
}

// arrange
Expression<Func<IExample, bool>> expr = m => m.Do(It.Is<Example>(x => x.IsValid));
var mock = new Mock<IExample>();
mock.Setup(expr).Verifiable();

// act
var example = new Example {IsValid = true};
mock.Object.Do(example);
example.IsValid = false;

// assert
mock.Verify(expr, Times.Once);