1

いくつかの単体テストを試しましたが、インターフェイスではなくクラスインスタンスを使用するメソッドのテストで問題が発生しました。その場合、MSMolesが私を助けてくれることがわかりました。しかし、彼らは型キャストの状況に友好的ではないようです。そして、私はこの状況に対処する方法についての情報も質問も見つけませんでした。例:

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を返しますが、2番目のキャストはを返しますNull。インターフェイスや通常のモックを使用せずにそのようなメソッドをテストする方法はありますか?私を助けることができる他のlibがある場合は、その名前を教えてください。

4

1 に答える 1

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、moledClassAインスタンスを表すを渡す必要があります。

が機能する理由は、から継承するCount1(target)生成されたmolクラスが、次の暗黙の演算子を定義しているためです。MClassAMoleBase<ClassA>

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