C# 是否有一种测试技术来验证所有属性是否已测试

C# 是否有一种测试技术来验证所有属性是否已测试,c#,unit-testing,fluent-assertions,C#,Unit Testing,Fluent Assertions,我有以下情况,任何帮助都将不胜感激 public class Poco { public string SomeData { get;set; } public string SomeMoreData { get;set; } } public class Worker { public Poco DoWork() { // do stuff } } 试验方法A [Test] public static void TestPocoIsP

我有以下情况,任何帮助都将不胜感激

public class Poco
{
  public string SomeData { get;set; }
  public string SomeMoreData { get;set; }
}

public class Worker
{
     public Poco DoWork()
     {
         // do stuff
     }
}
试验方法A

[Test]
public static void TestPocoIsPopulated()
{
    var objUt = new Worker();
    var actual = objUt.DoWork();       
    var expected = new Poco { SomeData = "reusltOne", SomeMoreData = "resultTwo" };

    actual.ShouldBeEquivalentTo(expected);

}
这个很好用。但是,对于嵌套类的较大测试,使用shouldbeeequivalentto()会变得很麻烦,我希望能够按如下方式完成此操作

编辑:同样使用方法A,您无法执行此操作。。。。 var expected=new Poco{SomeData=[NOT_NULL],SomeMoreData=“resultTwo”}

试验方法B

[Test]
public static void TestPocoIsPopulated()
{
    var objUt = new Worker();
    var actual = objUt.DoWork();    

    actual.SomeData.Should().Be("resultOne");
    actual.SomeMoreData.Should().Be("resultTwo");
}
但是,如果我向Poco添加了一个新属性,那么测试方法B不会抱怨,并且该属性可能不会得到测试。但是,使用方法A,测试将失败,因为ShouldBeEquivalentTo()将注意到新属性为null

所以,我的问题是,是否有一种方法C,如下所示

试验方法C

[Test]
public static void TestPocoIsPopulated()
{
    var objUt = new Worker();
    var actual = objUt.DoWork();    

    actual.SomeData.Should().Be("resultOne");
    actual.SomeMoreData.Should().Be("resultTwo");

    actual.Should().HaveAllPropertiesBeenTested().EqualTo(true); // <-------- is this possible?

}
[测试]
公共静态void testpocoispulled()
{
var objUt=新工人();
var-actual=objUt.DoWork();
actual.SomeData.Should().Be(“resultOne”);
actual.SomeMoreData.Should().Be(“resultTwo”);

actual.Should().haveAllPropertiesBeintested().EqualTo(true)你回答的最终问题是否定的,我们不支持验证是否所有属性都经过测试。这需要某种代理生成技术来跟踪对属性的访问。我必须承认这是一个有趣的想法,所以你可以提出一个增强功能。

到底应该等效吗?它是sp具体执行您要求的操作。您不能使用shouldbeeeEquivalento中的shouldbeeEquivalento(1)例如(请参见上面的编辑)BeGreaterThan(1)是的,您可以。只需使用options对象上的Using()方法之一覆盖特定属性的断言。请参见感谢您的回复。