Visual Studio 2010和测试驱动开发

dev*_*ium 6 tdd unit-testing mstest testdriven.net visual-studio

我正在使用Visual Studio进行测试驱动开发的第一步.关于如何使用VS 2010实现泛型类,我有一些问题.

首先,假设我想实现我自己的ArrayList版本.我首先创建以下测试(我在这种情况下使用MSTest):

[TestMethod]
public void Add_10_Items_Remove_10_Items_Check_Size_Is_Zero() {
    var myArrayList = new MyArrayList<int>();

    for (int i = 0; i < 10; ++i) {
        myArrayList.Add(i);
    }

    for (int i = 0; i < 10; ++i) {
        myArrayList.RemoveAt(0); //should this mean RemoveAt(int) or RemoveAt(T)?
                                 //VS doesn't know. Any work arounds?
    }

    int expected = 0;
    int actual = myArrayList.Size;
    Assert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用VS 2010的能力

ctrl +.

并让它在旅途中实现类/方法.

  1. 我在实现泛型类时遇到了一些麻烦.例如,当我定义一个.Add(10)方法时,VS不知道我是否打算使用泛型方法(因为该类是通用的)或Add(int number)方法.有没有办法区分这个?
  2. 返回类型也会发生同样的情况.让我们假设我正在实现一个MyStack堆栈,我想测试是否在我推送元素并弹出它之后,堆栈仍然是空的.我们都知道pop应该返回一些东西,但通常,这个测试的代码不应该关心它.Visual Studio会认为pop是一种void方法,实际上并不是人们想要的.怎么处理这个?对于每种方法,我是否应该首先进行"非常具体"的测试,例如很明显该方法应该返回一些内容,这样我就不会产生这种模糊性?即使不使用结果,我应该有类似的东西int popValue = myStack.Pop()吗?
  3. 我应该如何对泛型类进行测试?只测试一种通用类型?我一直在使用ints,因为它们易于使用,但我是否也应该使用不同类型的对象进行测试?你通常如何处理这个问题?
  4. 我看到有一个名为TestDriven for .NET的流行工具.在VS 2010发布时,它是否仍然有用,或者它的许多功能现在都是VS 2010的一部分,使它有点无用?
  5. 每当我在测试代码中定义一个新属性,并要求VS为我生成该方法存根时,它会生成一个getter和一个setter.如果我有类似的东西int val = MyClass.MyProperty想要理解(至少还有)我只想定义一个吸气剂.

谢谢

R0M*_*RMY 3

我看到有一个流行的工具,名为 TestDriven for .NET。随着 VS 2010 的发布,它是否仍然有用,或者它的很多功能现在已经成为 VS 2010 的一部分,使其变得有点无用?

如果您使用多种不同的单元测试框架之一(nunitmbunitxunitcsunit等),它仍然很有用。

还有其他工具(如Visual Nunit)提供用于运行单元测试的 Visual Studio 集成。