0

実行時に注入されたプロパティを取得する次のコントラクトがあります。

public interface IBroker
{
   IDriver Driver { get; }
}

public interface IDriver
{
   void Save();
}

public class FileDriver : IDriver { }
public class SqlDriver : IDriver { }

テストの適合性が非常に大きいため、モックを 1 回で準備しています。また、次の方法で 2 つのバージョンのブローカーを準備しています。

var mockFileBroker = new Mock<IBroker>();
mockFileBroker.Setup(x => x.Driver).Returns(new FileDriver());

var mockSqlBroker = new Mock<IBroker>();
mockSqlBroker.Setup(x => x.Driver).Returns(new SqlDriver());

問題は、プロパティDriverを調査すると、両方のモックで常に SqlDriver 型であるということです...そのため、 Moqは常に最新の登録を使用してコントラクト IDriver を解決しているように見えます...この動作を回避するためにできることはありますか? ?

4

1 に答える 1

1

Moq は最新の登録を返しますが、同じオブジェクトに対してのみです。

どこかで間違ったブローカーを使用していないか、どこかでモックを見逃していて、実稼働コードがドライバーを再設定していないかを再確認してください。

IDriverパトリック スティールは、特に単体テストではファイル システムとデータベースの使用を避ける必要があるため、返されたものもモックすることを検討する必要があると指摘しています。

于 2013-01-18T14:35:42.887 に答える