2012-09-02 99 views
1

我尝试了一些单元测试,并遇到了使用类实例而不是接口的测试方法的问题。在那种情况下,我发现MS莫尔斯可以帮助我。但看起来他们对于类型转换的情况并不友善。我发现没有任何信息,甚至没有问题如何处理这种情况。例如:微软莫尔斯和类型铸造

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铸造。有什么方法可以在不使用接口和通常嘲讽的情况下测试这种方法吗?如果有其他的lib可以帮助我,请给我提供它的名字。

回答

0

而是嘲讽ClassA类型,你可以做以下的所有实例:

var target = new MClassA(); 

target.NumberGet =() => 42; 

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

注意,对于Count1您可以直接使用痣,因为它会自动转换为ClassA实例。但是,由于Count2收到object,您需要明确并通过target.Instance,这代表了Moment ClassA实例。

原因Count1(target)作品是因为生成的摩尔类MClassA,它从MoleBase<ClassA>继承,定义了下面的操作者的隐式:

public static implicit operator ClassA(MoleBase<ClassA> mole) { // ... } 
+0

感谢。此前我也尝试使用Moled类中的实例,但它将原始值返回给我,但现在一切正常。对我来说似乎很神奇。 – Ritro