私はMoqを初めて使用しており、約5年間で単体テストしていません。多くのことが変わりました。Moqを使用する場合、実装されたメソッド実装された模擬インターフェイスはありますか?
私は頭の中で基本を包み込んでいます。
私はインターフェイスを持っています。
public interface ILogger
{
void Log(string message)
}
このインターフェイスは、次のように実装されています。
public class MyLogger : ILogger
{
public virtual void Log(string message)
{
StaticClass.StaticMethodNotToBeCalled<ILogger>().Log(message);
}
}
私は次のロジックをテストしています。
public class MyClass
{
public MyMethod(int z)
{
var logger = new MyLogger();
if(z == 5)
{
logger.Log("it is true");
return true;
}
logger.Log("it is false);
return false;
}
}
私のテストは次のようになります。
[TestMethod]
public void Test_MyMethod()
{
var mock = new Mock<ILogger>();
mock.Setup(y => y.Log(It.IsAny<string>()).Verifiable();
var o = new MyClass();
var result = o.MyMethod(5);
Assert.IsTrue(result);
mock.Verify();
}
私が取り組んでいる問題は、ILoggerインターフェイスの実装で呼び出される静的メソッドです。
私はちょうどモックが正確に何をすべきかをよく理解していないと思っています。
ILogger.Logはいつでもオーバーライドされ、その静的メソッドは呼び出されません。
これは可能ですか?
これは間違った方法ですか?
こんにちはありがとうございます。私は嘲笑されていることは自然界ではそれほどグローバルではないとうんざりしているが、それは問題ない。私はもともと、このインスタンスのクラスがコントローラであるため、コンストラクタで何もしないようにしていましたが、このパターンはまだうまく動作します。 – moctopus