C# 按返回类型区分运行时的方法
我们正在开发类似于规范框架的东西(例如MSpec、NSpec等),并希望在运行时区分规范类中的方法:C# 按返回类型区分运行时的方法,c#,type-conversion,C#,Type Conversion,我们正在开发类似于规范框架的东西(例如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
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");
}
}
正如您所看到的,这个类是不可编译的,因为_account()和changing_owner()没有返回语句
问题1:我想在C#中绝对没有办法指定如果没有给出return语句,默认情况下使用“returnnull”
由于没有全局类型别名(类似于typedef When As System.Void
),我们被迫实际引入给定的类,以及何时和何时强制用户在此方法中返回某些内容
我们在When方法中为When.ENABLED
或When.DISABLED(“原因”)
使用return语句临时禁用规范
在“给定方法”中,我们希望返回被测试的主题。我们希望实现以下功能:
Given an_account() { sut = new Account(); return sut; }
但是:“无法将表达式类型…转换为返回类型…”
接下来,我们考虑对给定的任何对象使用隐式转换运算符,但这在C#中也不允许,请参见:
问题2:那么,有没有什么解决办法可以让它发挥作用,或者返回类型区别的想法注定了吗?如果你稍微改变一下设计,就会有很多选择
返回给定(sut)
[Given]
属性标记该方法new Test()
.Given(() =>new Account())
.When(()=> ...);
如果你稍微改变一下你的设计,有很多选择
返回给定(sut)
[Given]
属性标记该方法new Test()
.Given(() =>new Account())
.When(()=> ...);
听起来你需要设计自己的语言。也有其他人这样做,例如SpecFlow,但是,我们认为创建自己的DSL会大大降低用户对框架的接受度。请帮自己一个忙,选择更好的类名(当/给定/应该时),否则,当/given在给定的上下文中是完全正常的类名时,您将被跟踪。ShouldBe是非常著名的FluentAssertions项目的一个扩展方法。不,默认值不会阻止我们的用户编写样板返回语句。听起来您需要设计自己的语言。但是,还有其他人这样做,例如SpecFlow,我们认为创建我们自己的DSL会极大地降低用户对框架的接受度。请帮自己一个忙,选择更好的类名(when/given/shouldbe),否则您将追求when/given在给定上下文中完全正常的类名。ShouldBe是非常著名的FluentAssertions项目的一个扩展方法。不,默认值不会阻止我们的用户编写样板返回语句。谢谢。这不是一个真正的答案,因为我的问题似乎没有这样的东西,但我想这是下一个最好的东西。谢谢。这不是一个真正的答案,因为我的问题似乎没有这样的东西,但我想这是下一个最好的事情。