Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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# 如何使用moq在所有方法和属性上设置回调_C#_Moq - Fatal编程技术网

C# 如何使用moq在所有方法和属性上设置回调

C# 如何使用moq在所有方法和属性上设置回调,c#,moq,C#,Moq,有没有一种方法可以设置对所有成员的回调,而不必分别设置它们 我正在尝试验证是否从当前线程调用了所有memebr,因此我希望执行类似的操作,但没有SetupAll() var mockMyType=new Mock(); var expectedThread=Thread.CurrentThread; mockMyType.SetupAll().Callback(()=>Assert.AreEqual(expectedThread,Thread.CurrentThread)); 我发现这个问题很难

有没有一种方法可以设置对所有成员的回调,而不必分别设置它们

我正在尝试验证是否从当前线程调用了所有memebr,因此我希望执行类似的操作,但没有SetupAll()

var mockMyType=new Mock();
var expectedThread=Thread.CurrentThread;
mockMyType.SetupAll().Callback(()=>Assert.AreEqual(expectedThread,Thread.CurrentThread));

我发现这个问题很难理解

如果您真的需要设置所有属性和方法,您不需要提供返回变量等,更不用说参数期望了吗


但是,如果您只需要将其设置为在调用时进行投诉,而不进行设置,那么它将通过行为传递给构造函数(使其严格)。或者,如果您想让它忽略调用而不是设置,请按照您的方式构造它,不带参数。

我希望所有属性和方法都具有默认的非严格行为,除非我想在从不同线程使用任何属性或方法时引发异常。哇,这是一个复杂的要求-这将导致脆弱的测试。重新设计类以实现可测试性,消除跨线程行为的要求。同意@Aliostad。要求方法只在某个线程上运行的用例是什么?我正在使用一个现有的非线程安全库,向其中添加异步方法并使其成为线程安全库。我通过在接口顶部添加一个层来实现这一点,该层将对请求进行排队,并在单个线程上按顺序运行它们。是的。因此,我使用依赖注入为新类(垫片)提供旧类的接口。然后在单元测试中,我想模拟这些接口,并确保它们是从单个线程调用的。
var mockMyType = new Mock<IMyType>();
var expectedThread = Thread.CurrentThread;
mockMyType.SetupAll().Callback(() => Assert.AreEqual(expectedThread, Thread.CurrentThread));