Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中扩展静态类#_C#_Unit Testing_Inheritance_Static - Fatal编程技术网

C# 如何在C中扩展静态类#

C# 如何在C中扩展静态类#,c#,unit-testing,inheritance,static,C#,Unit Testing,Inheritance,Static,我使用的是微软的VisualStudio单元测试框架(因此我不得不使用该项目)。我非常缺少一些更高级的断言,比如arelementsequal,您可以在MBUnit中找到它们 我想做 由于该类是静态的,我无法从中继承(创建超级assert),也无法添加扩展方法(因为它们是静态方法) 我不想简单地创建另一个类,并期望消费者使用这两个不同的类。我怎样才能扩展这个类?你不能。你必须创建一个新的 或者您可以创建一个现有的包,例如。您不能。你必须创建一个新的 或者您可以创建一个现有的包,比如。由于类是静态

我使用的是微软的VisualStudio单元测试框架(因此我不得不使用该项目)。我非常缺少一些更高级的断言,比如
arelementsequal
,您可以在
MBUnit
中找到它们

我想做

由于该类是静态的,我无法从中继承(创建
超级assert
),也无法添加扩展方法(因为它们是静态方法)


我不想简单地创建另一个类,并期望消费者使用这两个不同的类。我怎样才能扩展这个类?

你不能。你必须创建一个新的


或者您可以创建一个现有的包,例如。

您不能。你必须创建一个新的


或者您可以创建一个现有的包,比如。

由于类是静态的,您不能像您所说的那样,使用扩展方法向类“添加”更多的方法

在合理范围内,您可以做的最接近的事情如下:

public static class AssertExtensions
{
    public static void SuperAssert(bool expression)
    {
        // etc...
    }
}
如果您正在生成一个工具库,那么要求用户使用另一个类应该不是问题

如果您仍然担心,为什么不为您的测试创建一个基类,并让用户使用其中的方法进行断言呢

例如:

public class TestBase
{
    protected void AreEqual(object obj1, object obj2)
    {
        Assert.AreEqual(obj1, obj2); // etc...
    }

    protected void SuperAssert(bool expression)
    {
        // etc...
    }
}

由于该类是静态的,所以不能像您所说的那样使用扩展方法向该类“添加”其他方法

在合理范围内,您可以做的最接近的事情如下:

public static class AssertExtensions
{
    public static void SuperAssert(bool expression)
    {
        // etc...
    }
}
如果您正在生成一个工具库,那么要求用户使用另一个类应该不是问题

如果您仍然担心,为什么不为您的测试创建一个基类,并让用户使用其中的方法进行断言呢

例如:

public class TestBase
{
    protected void AreEqual(object obj1, object obj2)
    {
        Assert.AreEqual(obj1, obj2); // etc...
    }

    protected void SuperAssert(bool expression)
    {
        // etc...
    }
}

我不能添加扩展方法(因为它们是静态方法)。
为什么?您能否给出一些代码示例,说明为什么无法添加扩展方法?对于AreElementsEqual,您是否检查了不符合您需要的扩展方法?@IlyaIvanov:您无法添加可以对类名而不是实例调用的扩展方法。我不知道你需要什么样的代码样本,或者它应该显示什么。@DanielHilgarth你是说非静态方法?扩展方法是静态方法,可以用来扩展\添加更多的行为,我想这是OP想要的。@IlyaIvanov:扩展方法是静态方法。没错。但它们只能在对象的实例上调用,不能在类型名上调用。示例:无法创建允许以下代码的扩展方法:
int.MyExtension()
。您只能创建一个可以这样调用的函数:
inti=0;i、 MyExtension()
我不能添加扩展方法(因为它们是静态方法)。
为什么?您能否给出一些代码示例,说明为什么无法添加扩展方法?对于AreElementsEqual,您是否检查了不符合您需要的扩展方法?@IlyaIvanov:您无法添加可以对类名而不是实例调用的扩展方法。我不知道你需要什么样的代码样本,或者它应该显示什么。@DanielHilgarth你是说非静态方法?扩展方法是静态方法,可以用来扩展\添加更多的行为,我想这是OP想要的。@IlyaIvanov:扩展方法是静态方法。没错。但它们只能在对象的实例上调用,不能在类型名上调用。示例:无法创建允许以下代码的扩展方法:
int.MyExtension()
。您只能创建一个可以这样调用的函数:
inti=0;i、 MyExtension()