如何在C#中扩展静态类

时间:2013-03-25 11:00:16

标签: c# unit-testing inheritance static

我正在使用Microsoft的Visual Studio单元测试框架(因此我必须执行该项目)。我非常想念一些更高级的断言,例如AreElementsEqual中找到的MBUnit

我想制作它们。

由于类是静态的,我无法继承它(创建SuperAssert)而且我无法添加扩展方法(因为它们是静态方法)。

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

2 个答案:

答案 0 :(得分:3)

你做不到。你必须创建一个新的。

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

答案 1 :(得分:1)

由于这个类是静态的,你不能像你说的那样,使用扩展方法在类中“添加”更多的方法。

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

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