首页 > 解决方案 > 如何检查属性[]是否已被使用

问题描述

我将 Vs2015 与 NSubstitute 3.1.0 一起使用。此代码已通过,但不应通过。

public class Test
{
    public string[] Content { get; set; }
}
[Fact]
public void Should_What()
{
    var obj = Substitute.For<Test>();
    var test = obj.DidNotReceive().Content;
    var test2 = obj.Received().Content;
}

如果将类替换Test为接口,它将运行良好,但在我的测试中我有类。

如何检查属性 Content 是否已被使用?

标签: c#nsubstitute

解决方案


解决方案是对属性使用虚拟。

public virtual string[] Content { get; set; }

但是,如果两个相反的测试同时返回 True,我们就有了 bug。可以解释原因并指出解决方案,但这是一种解决方法。

在我看来,它应该抛出一个异常(例如 NotSupportedException,当对非虚拟属性执行测试时)。测试环境预计会检测到问题。所以应该是悲观的。在这种情况下应该更好地返回 false 而不是 true。给开发者签名问题(即使它在框架中)。例如在 SQL 中尝试检查 null 值时,总是会返回 false(null == true、null == 0 甚至 null == null)。这只是我的观点。你们怎么看?


推荐阅读