DataBaseConfigurationクラスに依存するStoreManagerクラスの機能をテストしています。テスト中のクラスの.NETへの依存性注入
public class StoreManager {
private DataBaseConfiguration dbConfig;
public void Store(string name) {
dbConfig.Store(name);
}
//other methods here
}
StoreManagerクラスはデータベースに格納され、このメソッドが正常に動作するかどうかをテストする唯一の方法は、データベースからのクエリです。私はそれを行う生産で別のクラスを持っている..私はstoredvaluesをテストするためにQueryManagerクラスを使用する必要があるよう
public class QueryManager {
private DataBaseConfiguration dbConfig;
public string Query(QueryExpression expr) {
//query logic
string name = "somename";
return name;
}}
は本家の私はそれが私には見えますテストだけ私のStoreManagerクラスと心配です。 は、あなたが見ることができるように、私はこのような基本的なテストケース...
[TestFixture]
public class StoreManagerTest {
[TestFixtureSetup]
public void Setup() {
DatabaseConfiguration dbConfig = new DatabaseConfiguration(/*test database details*/);
StoreManager sm = new StoreManager(dbConfig);
QueryManager qm = new QueryManager(dbConfig);
}
[Test]
public void TestStore_ValidStore() {
sm.Store("testname");
string queryResult = qm.Query(new QueryExpression("query_expr"));
Assert.AreSame(queryResult, "testname");
}}
を持って、離れて(StoreManagerです)ClassUnderTestから、QueryManagerクラスもDatabaseConfigに依存しています。
私はStoreManagerクラスの内部ロジックの多くを持っていない、DataBaseConfigクラスに、それだけで代表が良く、実際に実際にデータを記憶する記憶に関わるいくつかの複数のクラス、そのないDataBaseConfigがあります(保存します..
このテストは、QueryManagerをまったく使用せずに処理する方が良いかどうかを知りたいですか? また、DataBaseConfigurationへの依存関係をStoreManagerクラスに挿入するより良い方法があります(DataBaseConfigurationクラスがデータを格納するデータベースの接続文字列などの詳細を考慮していることを考慮してください)。そこに本番データベース接続文字列ではなくテストデータベース)を作成します。
説明してくれてありがとう! Rhino Mocksをプロダクションコードで使用できるかどうかはわかりません(http://builds.hibernatingrhinos.com/builds/Rhino-MocksからRhinoをダウンロードし、私のソースにRhino.Mocks.dllを参照する必要があるように見えます)コード)。この場合、手書きのスタブがどのように見えるかについてのいくつかの指針を与えますか? – Santhosh
@サントシー:あなたのサンプルに手書きのスタブを付けて更新 – BrokenGlass
サンプルコードはありがとう! – Santhosh