【问题标题】:How to test that a base constructor receives right arguments?如何测试基本构造函数接收正确的参数?
【发布时间】:2014-03-16 18:38:43
【问题描述】:

我正在创建一种方法来在我的公司中编写单元测试。我们每次都专注于测试一件事,但在检查基本构造函数是否接收正确参数的情况下,除了测试基本构造函数之外,我没有找到其他任何东西。

有没有更好的方法?我们将 MSTest 与 JustMock 和 Rhino 一起使用,因此可以使用扩展功能,但无论如何我还没有找到方法。在下面找到一个例子:

public Car : Vehicle
{
    public Car() : base(4) {};
}

public Vehicle
{
    public Vehicle(int wheelNumber) {};
}

我想对基本构造函数参数设置一个期望,就像我对普通方法所做的那样。

谢谢

【问题讨论】:

  • 我意识到这可能只是一个例子,但轮子的数量似乎并不应该是恒定的。如果基类可以选择指定某些内容,那么像您所做的那样在派生类中进行硬编码会破坏基类的约定。
  • @BrianRasmussen:你当然是对的。这是我做题时写的一个例子。

标签: c# .net unit-testing rhino-mocks justmock


【解决方案1】:

不要对基本构造函数有任何期望。对于您的代码,我会确保 Car 是车辆,然后检查默认的 wheelNumber 是否设置正确(只有在有公共方法知道这一点的情况下才会这样做)。

如果Car 的构造函数重复了Vehicle 中涉及wheelNumber 的代码,您的测试应该仍然通过。然后当有人重构代码以使其正确完成时,测试仍然应该通过。这样你就知道你没有改变你的功能。

【讨论】:

    【解决方案2】:

    我不确定您是否可以以这种方式测试基本构造函数。

    如果你要暴露一个基础属性,也许你会测试它

    大致:

    Assert.AreEqual(car.BaseProperty,4)
    

    或者您可以测试作用于数据/变量的公共方法的预期行为,另一个伪代码:

     class Vehicle
     {
        protected int  X{}
        public Vehicle(int x)
        { 
          X= x;
          ++X;
         }
     }
     car = new Car(4);
     Assert.ReturnsFive(car.DoSomething(),5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      • 2021-06-11
      • 1970-01-01
      • 2013-01-27
      • 1970-01-01
      相关资源
      最近更新 更多