русский
Germany.ruForen → Архив Досок→ Programmierung

Снова запутался - строка подключения.

25.06.19 16:20
Re: Снова запутался - строка подключения.
 
Murr патриот
Murr

Далее в тесте используешь соответственно FakeSomeClass там, где нужно тестовая ДБ или оригинал, так где тестовая ДБ не нужна.

-----

Тест (деструктивный, с дропом таблицы):

[TestClass]
public class C_AT_Table_Tests
{
#region Tests Data

private 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 data
Sql.C_AT.Drop drop = new Sql.C_AT.Drop();
Assert.IsNotNull(drop);

TSysDba.SysDba.ExecCmd(drop);


// create empty table for test
Sql.C_AT.Create create = new Sql.C_AT.Create();
Assert.IsNotNull(create);

TSysDba.SysDba.ExecCmd(create);

// chech if there was an error
Assert.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 Support

private 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-...

и модифицировать построитель строки...

 

Sprung zu