Как выполнить модульный тест ServiceStack?
Я люблю SS, но я ломаю голову, пытаясь провести юнит-тестирование своего бизнес-уровня. Я новичок в модульном тестировании и макетировании и читаю NSubstitute, так как это похоже на забавный насмешливый слой.
У меня есть моя файловая структура примерно так:
MainAppHostProject*
|
-AppStart
-AppHost <-- standard apphost
DtoProject*
|
-HelloWorldDto <-- simple POCO to
ServiceLayerProject*
|
-HelloWorldService <-- service interface that merely passes/sends Dtos to/from business layer
BusinessLayerProject*
|
-HelloWorldManager <-- logic to construct response and this class extends 'Service' (letting me access Db, session, etc)...sidenote: maybe i shouldve called this a HelloWorldRepository?
-CustomAuthProvider
-CustomUserSession
DaoProject*
|
-HelloWorldDao <-- POCO of table structure
Apphost указывает на сборку HelloWorldService и регистрирует базу данных SQL Server как стандартную.
Все на самом деле прекрасно работает, и я смог построить логику более чистым способом. К сожалению, я хочу начать модульное тестирование, НО я не знаю, как отделить базу данных.
Я пытался зарегистрировать фальшивку в базе данных памяти, но затем я думаю, что есть проблемы несовместимости с тем, как я использовал код для получения идентификаторов и т. Д. В SQL Server и SQLite.
// container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(":memory:", false, SqliteOrmLiteDialectProvider.Instance));
// container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(":memory:", false, SqlServerDialect.Provider));
Я просто хочу развязать и юнит-тест. Есть идеи, пожалуйста?
***ОБНОВИТЬ
public class UnitTest1
{
private Container container;
[TestMethod]
public void TestMethod1()
{
container = new Container();
// container.Register<IDbConnectionFactory>(new OrmLiteConnectionFactory(":memory:", false, SqliteDialect.Provider));
// sqlite didnt work so attempting with a real DB for now
var connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=XXX;Integrated Security=True";
container.Register<IDbConnectionFactory>(c => new OrmLiteConnectionFactory(connectionString, SqlServerDialect.Provider));
// dependencies are injecting ok
container.RegisterAutoWiredAs<FeedbackRepo, IFeedbackRepo>();
// service is autowiring --> leading to good injections
container.RegisterAutoWired<FeedbackService>();
var service = container.Resolve<FeedbackService>();
service.SetResolver(new BasicResolver(container));
// unit test is working well
var request = new DTO.FeedbackDto { Message = "test" };
bool result = service.Post(request);
}
}
В данный момент я пытаюсь заставить 'Db' перестать быть нулевым в моих производных классах Service.