{-6ren">
gpt4 book ai didi

c# - 什么调用和区分 "It", "Because"和 "Establish"

转载 作者:行者123 更新时间:2023-11-30 15:16:10 26 4
gpt4 key购买 nike

我最近开始使用 MSpec,将类分为 EstablishBecauseIt

虽然我知道如何使用它们,但我不确定是什么让它们起作用。

我知道他们是代表

Because of = () =>
{

};

但是在查看委托(delegate)的定义方式时:

public delegate void Print(int value);

它看起来像 EstablishBecauseIt 被定义为不返回任何内容的委托(delegate) (void)并且不接受任何争论。

这是有道理的,但是如何区分 EstablishBecauseIt。 IE。停止使用 It 而不是 Establish 的效果是一样的。他们中的一个如何知道使用另一个?即 It 使用 Establish

他们也只是被安排在类里面。什么调用它们?

public class foobar: setup
{
private static int engineId;

Because of = () =>
{

};

It should = () =>
{

};
}

请参阅上面的委托(delegate)初始化这些函数。但我不知道他们是如何被调用的,以及为什么这样不行:

public class foobar: setup
{
private static int engineId;

It of = () =>
{

};

It should = () =>
{

};
}

有人可以帮我解释一下吗?

最佳答案

这些委托(delegate)属于不同类型,尽管它们都具有相同的签名。所以他们是根据他们的类型来区分的。例如,假设您从示例用法中获得了此类:

[Subject("Authentication")]
public class When_authenticating_a_user
{
Establish context = () =>
{
Subject = new SecurityService();
};

Cleanup after = () =>
{
Subject.Dispose();
};

static SecurityService Subject;
}

现在您想模仿运行该测试。你使用反射首先获取所有字段,因为 contextafter 都是字段:

var fields = typeof(When_authenticating_a_user).GetFields(BindingFlags.Instance | BindingFlags.NonPublic);

现在你有一堆字段,但哪个是哪个?您可以通过字段类型来区分它们。一个是 Establish 类型,另一个是 Cleanup 类型(两者都是具有相同签名的委托(delegate)类型):

var establish = fields.FirstOrDefault(c => c.FieldType == typeof(Establish));
var cleanup = fields.FirstOrDefault(c => c.FieldType == typeof(Cleanup));

然后你创建一个实例并根据一些逻辑执行它们:

var instance = Activator.CreateInstance(typeof(When_authenticating_a_user));
// get method
var establishMethod = (Establish)establish.GetValue(instance);
// execute
establishMethod();

关于c# - 什么调用和区分 "It", "Because"和 "Establish",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50386990/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com