Снова запутался - строка подключения.
Далее в тесте используешь соответственно FakeSomeClass там, где нужно тестовая ДБ или оригинал, так где тестовая ДБ не нужна.
-----
Тест (деструктивный, с дропом таблицы):
[TestClass]public class C_AT_Table_Tests{#region Tests Dataprivate Int16 UserID = 10;private String UrlAbsolutePath = @"http://myUrl/path/doc.dot?param";C_AT.Table table;#endregion#region Initalisation[ClassInitialize]public static void C_AT_Init(TestContext context){TEnvironmentValidator.CheckTestEnvironment("SetUp, CleanUp and tests can be run only on test environment");}[ClassCleanup]public static void C_AT_CleanUp(){//TEnvironmentValidator.CheckTestEnvironment("SetUp, CleanUp and tests can be run only on test environment");}[TestInitialize]public void Test_Init(){// drop existing dataSql.C_AT.Drop drop = new Sql.C_AT.Drop();Assert.IsNotNull(drop);TSysDba.SysDba.ExecCmd(drop);// create empty table for testSql.C_AT.Create create = new Sql.C_AT.Create();Assert.IsNotNull(create);TSysDba.SysDba.ExecCmd(create);// chech if there was an errorAssert.AreEqual(TExceptionHandler.Errors, 0);}[TestCleanup]public void Test_CleanUp(){Sql.C_AT.Drop drop = new Sql.C_AT.Drop();Assert.IsNotNull(drop);TSysDba.SysDba.ExecCmd(drop);}#endregion#region Tests#region Constructor Tests[TestMethod]public void C_AT_Table_Constructor_1(){table = new C_AT.Table();Assert.IsNotNull(table);//Assert.IsInstanceOfType(table, Type.GetType("LiOrderEx.A.C_AT+Table"));}[TestMethod]public void C_AT_Table_Constructor_2(){//table = (C_AT.Table)TLiOrderExFactory.Create(TKnownTables.C_AT);table = new C_AT.Table();string tn = table.GetType().ToString();Assert.IsNotNull(table);//Assert.IsInstanceOfType(table, Type.GetType("LiOrderEx.A.C_AT+Table,"));}#endregion#region Methods Tests[TestMethod]public void C_AT_Table_Insert_LogAccess(){//table = (C_AT.Table)TLiOrderExFactory.Create(TKnownTables.C_AT);table = new C_AT.Table();Assert.IsNotNull(table);table.Load(UserID);Assert.IsFalse(table.HasData);table.Insert_LogAccess(UserID, UrlAbsolutePath);table.Load(UserID);Assert.IsTrue(table.HasData);//Assert.IsInstanceOfType(table, Type.GetType("LiOrderEx.A.C_AT+Table,"));}#endregion#region Properties Tests#endregion#endregion#region Supportprivate void InsertTestRecord(){C_AT.Table table = new C_AT.Table();table.FillInitialData_1();foreach (C_AT.Row row in table){table.Save(row);}}#endregion}
Куда предлагается подставить FakeSomeClass?
Понимаю - будет вопрос по CheckTestEnvironment
public class TEnvironmentValidator{public static void CheckTestEnvironment(){CheckTestEnvironment("Thoose tests can be run ONLY on the test environment.");}public static void CheckTestEnvironment(string pMessage){DbExec.Interfaces.ITestConnection connection = TExec.Instance as DbExec.Interfaces.ITestConnection;Assert.IsNotNull(connection);if (!connection.IsTestEnvironment)Assert.Fail(pMessage);}}
Отсюда нельзя поменять ничего, Специально делал с невозможностью - защищался от возможных ошибок. Только проверка можно ли их раннать.
Если копать глубже, то упрусь в что-то закешенное - инстансе SomeClass или потомка - та же ситуация что и со строкой, но на другом уровне.
Подумал... хммм... в принципе именно твое предложение и реализовано. Только не наследованием, а имплементацией определенного интерфейса.
Но проблема - смена строки подключения - не ресолвится...
Видимо надо модифицировать TMapNameToConnectionModel.Key - добавлять признак - win-, web-, test-...
и модифицировать построитель строки...