私はC#での単体テストとMoqの使い方を学ぶのが初めてです。以下は、私がテストしようとしているクラスです。
class MyClass
{
SomeClass someClass;
public MyClass(SomeClass someClass)
{
this.someClass = someClass;
}
public void MyMethod(string method)
{
method = "test"
someClass.DoSomething(method);
}
}
class Someclass
{
public DoSomething(string method)
{
// do something...
}
}
以下は私のTestClassです:
class MyClassTest
{
[TestMethod()]
public void MyMethodTest()
{
string action="test";
Mock<SomeClass> mockSomeClass = new Mock<SomeClass>();
mockSomeClass.SetUp(a => a.DoSomething(action));
MyClass myClass = new MyClass(mockSomeClass.Object);
myClass.MyMethod(action);
mockSomeClass.Verify(v => v.DoSomething(It.IsAny<string>()));
}
}
次の例外が発生します。
Expected invocation on the mock at least once, but was never performed
No setups configured.
No invocations performed..
メソッド「MyMethod」が呼び出されているかどうかを確認したいだけです。何か不足していますか?
sorry..Iは..私の質問を編集しました
—
user591410
順調ですが、投稿されたコードにバグがあります。それはコンパイルされません-Someclassでは大文字、DoSomethingでは無効な戻り値。その後、パブリックアクセスが必要になり、DoSomethingを仮想化します。要するに、あなたはおそらくあなたのプロダクションコードにもバグがあります。
—
TrueWill、2012
御返答いただき有難うございます。私はモックメソッドを設定しながら、引数の間違った設定された...
—
user591410
「設定されていません。」誤解を招く可能性があります。呼び出されるメソッドの動作を設定する必要はありません。また、テストしているメソッドを呼び出す必要がある場合は、「Verify」メソッドを実行することも忘れないでください(この場合は問題ありません)。
—
Sielu 2016年
SomeClass
定義がない場合はコンパイルされませんが、MyMethod(string)
そうではないようです。