答えは「いいえ、既存のコードを変更せずにモックする方法はありません」です。
単体テストでコードをカバーできないという事実は、コード自体に何らかの問題があることを示す証拠となります。だから私は本当にアプローチを再訪することをお勧めします。
これが実用的でない場合は、次のトリックを試すことができます。 (あなたがテストコードで設定のだ)公共セッターを持つプロパティとしてTestData
を公開:
public static class ClassData
{
public static string GetData()
{
//Wish to mock TestResult method
TestData TD = new TestData();
string FinalResult = TestData.TestResult();
//Some logic
return FinalResult;
}
public static TestData TestData { private get; set; }
}
public class TestData
{
public virtual string TestResult()
{
return string.Empty;
}
}
試験体のジャストアイデア:
var testDataMock = new Mock<TestData>(); // Moq as example
testDataMock.Setup(t => t.TestResult()).Returns("some string");
ClassData.TestData = testDataMock.Object;
var result = ClassData.GetData();
//Assertions
これは質問に答えますか? – Evk
はい。投稿されたコードをテストした場合、元のコードのエラーが認識されます。 – jdweng
私はdownvoteをしませんでしたが、私はそれがどのように答えるか分かりません。 OPは静的な 'GetData'メソッドを変更せずに' TestData'クラスの 'TestResult()'呼び出しをモックしようとしています。あなたの答えが何らかの形でそれに関連しているのを見ないでください。 – Evk