c# - 如何检查属性[]是否已被使用
问题描述
我将 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 是否已被使用?
解决方案
解决方案是对属性使用虚拟。
public virtual string[] Content { get; set; }
但是,如果两个相反的测试同时返回 True,我们就有了 bug。可以解释原因并指出解决方案,但这是一种解决方法。
在我看来,它应该抛出一个异常(例如 NotSupportedException,当对非虚拟属性执行测试时)。测试环境预计会检测到问题。所以应该是悲观的。在这种情况下应该更好地返回 false 而不是 true。给开发者签名问题(即使它在框架中)。例如在 SQL 中尝试检查 null 值时,总是会返回 false(null == true、null == 0 甚至 null == null)。这只是我的观点。你们怎么看?
推荐阅读
- angular - Angular 6:forChild 后备路由覆盖子路由
- python - 我碰巧偶然发现了这段代码:”用 for w in words:,该示例将尝试创建一个无限列表
- sql-server - 获取每单位的平均值并每年过滤查询
- jmeter - JMeter - HTTP2 请求不保存 MD5 哈希
- keras - 预测具有跳跃(异常值)的输出的最佳归一化技术和 LSTM 结构是什么?
- jquery - 切换 UL 内容和更新文本
- sql - 加入 json 列?
- python - 安装程序.py 安装。找不到包初始化文件“graph\__init__.py”(或不是常规文件)
- antd - 单击后如何自动取消突出显示按钮
- ruby-on-rails - id vs name ruby 的两种方式查找