Здравствуйте! Подскажите, пожалуйста, как правильно работать с тестами которые взаимодействуют с бд. И если есть, то тесты взаимодействующие с базовыми веб-сервисами
По поводу тестов с веб-сервисами - увы, примеров нет.
А вот по поводу тестов с БД:
1) Развернуть на SQL сервере БД.
2) Настроить проект тестов например Base.UnitTests
а.В проекте открыть файл Integration.config
если такового у вас в проекте нет то необходимо добавить ссылку на Integration.config из проекта UnitTest. Сделать это можно посредством Visual Studio, либо добавив конфиг через файл проекта:
пример значения "_путь_к_папке_Terrasoft.WebApp" - "C:\Projects\Autocheckout\Creatio\TSBpm\Src\Lib\Terrasoft.WebApp.Loader\Terrasoft.WebApp" для примера, привожу файл App.config полностью
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. Результат запуска:
В проект Terrasoft.Configuration.Tests установил пакеты NuGet "NUnit" и "NUnit3TestAdapter". В тест-кейсах мне нужно сделать запросы в БД, поэтому нужен экземпляр UserConnection. Подскажите, как его получить.