我们正在开发类似 Spec-framework 的东西(例如 MSpec、NSpec 等),并希望在运行时区分规范类中的方法:
public class AccountSpecs
{
private Account sut; // subject under test
Given an_account() { sut = new Account(); }
When changing_owner()
{
var result = sut.ChangeOwner("new owner");
It["returns_previous_owner"] = () => result.ShouldBe("old owner");
}
}
正如你所看到的,这个类是不可编译的,因为 an_account() 和 changed_owner() 没有返回语句。
Q1:我想C#中绝对没有办法指定如果没有给出return语句则默认使用“return null”?
由于没有全局类型别名(类似于typedef When as System.Void
),我们被迫实际引入 Given 和 When 类,并强制我们的用户在此方法中返回某些内容。
我们在 When 方法中使用 return 语句When.ENABLED
来When.DISABLED("reason")
临时禁用规范。
在“给定方法”中,我们要返回被测对象。我们要启用以下功能:
Given an_account() { sut = new Account(); return sut; }
但是:“无法将表达式类型 ... 转换为返回类型 ...”
接下来我们考虑了将任何对象隐式转换为 Given 的操作符,但这在 C# 中也是不允许的,请参阅:cs0553 user-defined conversion from base class not allowed
Q2:那么有什么解决方法可以解决这个问题,还是返回类型区分的想法注定要失败?