c# - 有没有更好的方法用最小起订量编写这个测试?

标签 c# unit-testing moq

我有一个正在测试的方法中调用的私有(private)方法。我想验证是否将正确的参数传递给了这个私有(private)方法。我已经在 Moq 中编写了以下设置,它将测试我想要的内容,但它并不能真正让我遵循 Arrange、Act、Assert 模式。

有什么方法可以执行类似的测试,断言可以与我的所有其他断言一起出现吗?目前,下面的代码位于 Arrange 中。

     myClass.Setup(
                x =>
                x.myMethod(
                    It.IsAny<Person>>(),
                    It.IsAny<string>(),
                    It.IsAny<Person>(),
                    It.IsAny<ICollection<string>>(),
                    It.IsAny<ICollection<string>>(),
                    It.IsAny<bool>())).Callback
                <Person, string, Person, Person, ICollection<string>, bool>(
                    (a, b, c, d, e, f) =>
                        { 
                            Assert.AreEqual("NameA", a.Name); 
                            Assert.AreEqual("StringB", b);
                            Assert.AreEqual("NameC", c.Name);
                            Assert.AreEqual(2, d);

                            var dList = d.ToList().OrderBy(x => x.Name);
                            Assert.AreEqual("PersonA", dList[0].Name)
                            Assert.AreEqual("PersonB", dList[1].Name);
                        });

我应该说,我知道您可以执行验证以检查是否已使用某些输入调用方法,但是我不知道有任何方法可以匹配 ICollection 参数。

最佳答案

如果您使用这些断言来检查参数,则可以在您的设置中进行。如果您的模拟使用严格的行为,那么如果参数与谓词不匹配,它将失败。

 // declare your mock with strict behavior

 myClass.Setup(
     x =>
     x.myMethod(
         It.Is<Person>(person => person.Name == "NameA"),
         "Stringb",
         It.Is<Person>(person => person.Name == "NameC"),,
         It.Is<ICollection<string>>(coll =>{ 
                //your other validations
            }),
         It.IsAny<ICollection<string>>(),
         It.IsAny<bool>()));

关于c# - 有没有更好的方法用最小起订量编写这个测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192540/

相关文章:

unit-testing - 使用 phpunit 测试多个异常

php - 使用 Simpletest 对 CodeIgniter 进行单元测试 - 很少的测试

.net - 如何模拟(使用最小起订量)Unity 方法

c# - Expression<Func<>> 仅有效内联而不是通过 Moq 的 Setup() 中的绑定(bind) lambda?

c# - null 和 System.DBNull.Value 之间有什么区别?

c# - C#中如何判断一个变量是否已经初始化?

c# - AppFabricCacheSessionStoreProvider 和 StateServer 能否在同一应用程序中共存?

c# - Windows 8 中的自然语言处理

android - 如何创建既可用于Android测试又可用于单元测试的测试类?

c# - 使用最小起订量模拟第三方回调事件