需要一个意想不到的后果的C#示例

dgi*_*ard 8 c# unit-testing demo

我正在组织一个关于单元测试的好处的演示文稿,我想要一个意想不到的后果的简单示例:在一个类中更改代码以破坏另一个类中的功能.

有人可以建议一个简单,易于解释的例子吗?

我的计划是围绕此功能编写单元测试,以证明我们知道我们通过立即运行测试来破坏某些东西.

Rob*_*Rob 12

一个稍微简单,因此可能更清晰的例子是:

public string GetServerAddress()
{
    return "172.0.0.1";
}

public void DoSomethingWithServer()
{
    Console.WriteLine("Server address is: " +  GetServerAddress());
}
Run Code Online (Sandbox Code Playgroud)

如果GetServerAddress是更改以返回数组:

public string[] GetServerAddress()
{
    return new string[] { "127.0.0.1", "localhost" };
}
Run Code Online (Sandbox Code Playgroud)

DoSomethingWithServer的输出会有所不同,但它仍然会编译,从而产生一个更微妙的错误.

第一个(非阵列)版本将打印Server address is: 127.0.0.1,第二个将打印Server address is: System.String[],这是我在生产代码中也看到的.毋庸置疑,它不再存在!


SLa*_*aks 8

这是一个例子:

class DataProvider {
    public static IEnumerable<Something> GetData() {
        return new Something[] { ... };
    }
}

class Consumer {
    void DoSomething() {
        Something[] data = (Something[])DataProvider.GetData();
    }
}
Run Code Online (Sandbox Code Playgroud)

改变GetData()返回a List<Something>,Consumer并将打破.

这看起来有点人为,但我在实际代码中看到了类似的问题.