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

问题描述:

我正在使用微软的Visual Studio单元测试框架(因此我必须执行该项目)。我非常想念一些更高级的断言,例如您在MBUnit中发现的AreElementsEqual如何在C#中扩展静态类#

我想制作它们。由于类是静态的,我不能从它继承(创建SuperAssert),我不能添加扩展方法(因为它们是静态方法)。

我不想简单地创建另一个类,并期望消费者使用两个不同的类。我如何扩展课程?

+0

'我不能添加一个扩展方法(因为他们是静态方法).'为什么呢?你能举一些关于为什么你不能添加扩展方法的代码示例吗? – 2013-03-25 11:04:46

+2

对于AreElementsEqual,你检查了[CollectionAssert](http://msdn.microsoft.com/en-us/library/ms245294.aspx)是否不符合你的需求? – 2013-03-25 11:05:42

+2

@IlyaIvanov:你根本不能添加一个可以在类名上调用的扩展方法,而不是一个实例。我没有看到你需要一个代码示例 - 或者它应该显示什么。 – 2013-03-25 11:06:03

你不能。你将不得不创建一个新的。

或者您可以创建一个现有的包,如Fluent Assertions

由于该类是静态的,因此不能像您说的那样使用扩展方法将其他方法“添加”到类中。

你可以在合理范围内做的最接近的是以下几点:

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... 
    } 
}