1

我尝试了一些单元测试并遇到了使用类实例而不是接口的测试方法的问题。在那种情况下,我发现 MS Moles 可以帮助我。但似乎他们对类型转换情况并不友好。我没有找到任何信息,甚至没有发现如何处理这种情况的问题。例子:

public class ClassA
{
 public int Number {get {return 10;}}
}

public class ClassB
{
 public int Count1(ClassA arg) { return arg.Number; } 
 public int Count2(object arg) { return (arg as ClassA).Number; }
}

并且在测试时

var cl = new MolesUnitTesting.Moles.MClassA();
MolesUnitTesting.Moles.MClassA.AllInstances.NumberGet = t1 => 20;

第一个Count工作正常并返回 20 但在第二个返回中进行转换Null。有没有办法在不使用接口和通常的模拟的情况下测试这种方法?如果有其他库可以帮助我,请提供它的名称。

4

1 回答 1

0

ClassA您可以执行以下操作,而不是模拟该类型的所有实例:

var target = new MClassA();

target.NumberGet = () => 42;

Assert.AreEqual(Count1(target), 42);
Assert.AreEqual(Count2(target.Instance), 42);

注意Count1你可以直接使用mole,因为它会自动转换为ClassA实例。但是,由于Count2收到 an ,object您需要明确并传递target.Instance代表 moledClassA实例的 。

之所以Count1(target)有效,是因为生成的 moole 类MClassA,它继承自MoleBase<ClassA>,定义了以下隐式运算符:

public static implicit operator ClassA(MoleBase<ClassA> mole) { // ... }
于 2012-09-02T15:25:53.907 回答