代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

NSubstitute在Received()检查中检查复杂参数

  •  -1
  • Paul Michaels  · 技术社区  · 7 年前

    here ,我被引导去相信我所尝试的是可能的。然而,当我认为考试应该通过的时候,我似乎正在经历一次失败的考试。

    以下是我的测试代码:

    // Arrange
    dbOperations = Substitute.For<IDbOperations>();
    myClass = new MyClass(dbOperations);
    
    string test = "test string";
    
    // Act
    myClass.MyMethod(arg1, arg2, test);
    
    // Assert            
    dbOperations.Received(2).TestMethod(Arg.Is<MyClass2>(a => a.MyString == test));
    

    我查过了 MyMethod 它使用的一个实例调用dbOperations两次 MyClass2 其中 MyString 属性设置为“测试字符串”。我是否误读了这里的文件?这种检查是否可能与NSUBITUTE进行,如果是,我做错了什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   David Tchepak    7 年前

    以下是一个按预期工作的示例(使用NSub 3.1.0):

    using Xunit;
    using NSubstitute;
    using System;
    
    public interface IDbOperations {
        void TestMethod(MyClass2 myClass2);
    }
    
    public class MyClass2 {
        public String MyString { get; set; }
    }
    
    public class MyClass {
        private IDbOperations Ops { get; }
    
        public MyClass(IDbOperations ops) { Ops = ops; }
    
        public void MyMethod(object arg1, object arg2, string test) {
            Ops.TestMethod(new MyClass2 { MyString = test });
            Ops.TestMethod(new MyClass2 { MyString = test });
        }
    }
    
    public class UnitTest1 {
    
        [Fact]
        public void StackOverflowQuestion() {
            // Arrange
            var arg1 = "1";
            var arg2 = "2";
            var dbOperations = Substitute.For<IDbOperations>();
            var myClass = new MyClass(dbOperations);
    
            string test = "test string";
    
            // Act
            myClass.MyMethod(arg1, arg2, test);
    
            // Assert            
            dbOperations.Received(2).TestMethod(Arg.Is<MyClass2>(a => a.MyString == test));
        }
    }
    

    我发现在这样的情况下,创建一个新的简化版本,看看它是否有效(如上所述),然后花一些时间看看我的实际代码与简化的代码有何不同。希望这能突出问题所在。

        2
  •  -1
  •   JJ Yong    7 年前

    比较字符串时,请尝试使用Equals方法,而不是==。 how-to-compare-strings