Здравствуйте! Подскажите, пожалуйста, как правильно работать с тестами которые взаимодействуют с бд. И если есть, то тесты взаимодействующие с базовыми веб-сервисами
Нравится
Здравствуйте,
По поводу тестов с веб-сервисами - увы, примеров нет.
А вот по поводу тестов с БД:
1) Развернуть на SQL сервере БД.
2) Настроить проект тестов например Base.UnitTests
а.В проекте открыть файл Integration.config

если такового у вас в проекте нет то необходимо добавить ссылку на Integration.config из проекта UnitTest. Сделать это можно посредством Visual Studio, либо добавив конфиг через файл проекта:
<None Include="..\UnitTest\Integration.config">
<Link>Integration.config</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>b. прописать путь к базе данных в connectionString
<connectionStrings>
<add name="mssqlUnitTest" connectionString="Data Source=server_name; Initial Catalog=db_name; Persist Security Info=True; MultipleActiveResultSets=True; Integrated Security=SSPI; Pooling = true; Max Pool Size = 100; Async = true" />
</connectionStrings>3) В файл App.config тестового проекта добавить (если ее нет)
<appSettings>
<add key="ConfigurationRuntimeDirectory" value="_путь_к_папке_Terrasoft.WebApp" />
</appSettings>пример значения "_путь_к_папке_Terrasoft.WebApp" - "C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" для примера, привожу файл App.config полностью
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<appSettings>
<add key="ConfigurationRuntimeDirectory" value="C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" />
</appSettings>
</configuration>4) Создать класс в тестовом проекте с учетом Name Convention
5) Создаем класс с тестом (кейс показывает возможность работы) будем через наш Entity создавать запись с константным именем и email контакта и проверять по email что такой контакт создался в базе.
[TestFixture, Category("Integration")]
public class ContactDataTests : BaseConfigurationTestFixture
{
private const string ContactEmail = "testemail@test.com";
private const string ContactName = "David";
protected override IEnumerable<Type> GetRequiringInitializationSchemas() {
EntitySchemaManager.AddCustomizedEntitySchema("Contact",
new Dictionary<string, string> {
{ "Name", "MediumText"},
{ "Email", "MediumText"}
});
return new List<Type>();
}
[Test]
public void SaveContactEmail_EmailSaved_EmailCorrect() {
var contactSchema = UserConnection.EntitySchemaManager.GetInstanceByName("Contact");
var contact = contactSchema.CreateEntity(UserConnection);
contact.SetColumnValue(contact.Schema.GetPrimaryColumnName(), Guid.NewGuid());
contact.SetColumnValue("Email", ContactEmail);
contact.SetColumnValue("Name", ContactName);
contact.SetDefColumnValues();
contact.Save(false);
var select = new Select(UserConnection)
.Column("Name")
.From("Contact")
.Where("Email").IsEqual(Column.Const(ContactEmail)) as Select;
using (DBExecutor dbExec = UserConnection.EnsureDBConnection()) {
using (IDataReader reader = dbExec.ExecuteReader(select.GetSqlText(), select.Parameters)) {
if (reader.Read()) {
Assert.AreEqual(ContactName, reader.GetColumnValue<string>("Name"));
}
}
}
}
}Обязательно указать категорию Integration для класса тестов [TestFixture, Category("Integration")]
6) Запускаем тест стандартными средствами студии или Resharper. Результат запуска:
