は、私は(BuildServerExtensionsクラスで)次のシグネチャを持つ拡張メソッドを持っている::拡張メソッドに依存するメソッドをテスト可能にする方法はありますか?
public static IEnumerable<BuildAgent> GetEnabledBuildAgents(
this IBuildServer buildServer,
string teamProjectName)
{
// omitted agrument validation and irrelevant code
var buildAgentSpec = buildServer.CreateBuildAgentSpec(teamProjectName);
}
そして(BuildAgentSelectorクラスの)最初の呼び出しを別の方法:
public BuildAgent Select(IBuildServer buildServer, string teamProjectName)
{
// omitted argument validation
IEnumerable<BuildAgent> serverBuildAgents =
buildServer.GetEnabledBuildAgents(teamProjectName);
// omitted - test doesn't get this far
}
そして、私はしようとしています私は私が手にこのテストを実行すると
[TestMethod]
public void SelectReturnsNullOnNullBuildAgents()
{
Mocks = new MockRepository();
IBuildServer buildServer = Mocks.CreateMock<IBuildServer>();
BuildAgentSelector buildAgentSelector = new BuildAgentSelector();
using (Mocks.Record())
{
Expect.Call(buildServer.GetEnabledBuildAgents(TeamProjectName)).Return(null);
}
using (Mocks.Playback())
{
BuildAgent buildAgent = buildAgentSelector.Select(buildServer, TeamProjectName);
Assert.IsNull(buildAgent);
}
}
::でMSTestをしてRhino.Mocks(V3.4)を使用してテスト
System.InvalidOperationException
:戻り値またはスローする例外を必要とIBuildServer.CreateBuildAgentSpec("TeamProjectName");
前の方法。
これは明らかにテスト実装ではなく実際の拡張メソッドを呼び出しています。私の次の傾きが試してみた:
Expect.Call(BuildServerExtensions.GetEnabledBuildAgents(buildServer, TeamProjectName))
.Return(null);
その後、私はこれを傍受するRhino.Mocksための私の期待は、おそらく見当違いだったことに気づきました。
問題は次のとおりです。この依存関係をなくし、Selectメソッドをテスト可能にするにはどうすればよいですか?
拡張メソッドとBuildAgentSelectorクラスは同じアセンブリ内にあり、これを変更することを避けるか、拡張メソッド以外のものに変更する必要があることに注意してください。別のモッキングフレームワークは、この状況。