Похоже, что вам может понадобиться классовое приспособление .
Когда использовать: , когда вы хотите создать отдельный контекст теста и поделиться им среди всех тестов в классе и очистить его после завершения всех тестов в классе .
blockquote>Создайте отдельный класс для настройки любых данных, которые будут использоваться вашими тестами, и для их очистки после завершения тестов.
public class MovieSeedDataFixture : IDisposable { public MovieDbContext MovieContext { get; private set; } = new MovieDbContext(); public MovieSeedDataFixture() { MovieContext.Movies.Add(new Movie { Id = 1, Title = "Movie 1", YearOfRelease = 2018, Genre = "Action" }); MovieContext.Movies.Add(new Movie { Id = 2, Title = "Movie 2", YearOfRelease = 2018, Genre = "Action" }); MovieContext.Movies.Add(new Movie { Id = 3, Title = "Movie 3", YearOfRelease = 2019, Genre = "Action" }); MovieContext.SaveChanges(); } public void Dispose() { MovieContext.Dispose(); } }
Затем используйте его в своих тестах, расширив интерфейс
IClassFixture
.public class UnitTests : IClassFixture
{ MovieSeedDataFixture fixture; public UnitTests(MovieSeedDataFixture fixture) { this.fixture = fixture; } [Fact] public void TestOne() { // use fixture.MovieContext in your tests } }
Для меня это зависит от модели, за которой я следую. Если бы я использую MVC, это было бы
Project
-Models
-Controllers
-Views
Или для MVP это было бы
Project
-Models
-Presenters
-Views
При представлениях я разделяю их в пространства имен, относящиеся к контроллерам, т.е. если у меня есть контроллер для обработки транзакций материально-технических ресурсов, у меня мог бы быть он как
Project
-Models
--Inventory
-Controllers
--Inventory
---TransactionsController.cs
-Views
--Inventory
---Transactions
----EditTransactionsView.dfm
Для интерфейсов я поместил интерфейс в тот же каталог как реализации.
Мы обычно сохраняем проекты SourceSafe, названия проекта, пространства имен и структуры каталогов в синхронизации.
Например, учитывая наше название компании как XCENT структура SourceSafe и соответствующая структура каталогов для App1 похожи:
\XCENT
\XCENT\App1
\XCENT\App1\UI
\XCENT\App1\UI\Test //test harness for UI
\XCENT\App1\Data
\XCENT\App1\Data\Test //test harnesses for Data
и т.д.
Проект UI называют XCENT.App1. UI.cproj и классы в том пространстве имен являются XCENT.App1. UI
Мы работаем на многие клиенты также, таким образом, работа специально для них снабжается префиксом их имя. Client1\App1\UI, и т.д.
Все в нашей фирме используют те же конвенции, и сразу ясно, где все соответствует.
Если имеет смысл сегментировать логический интервал далее, мы делаем так. Такая другая сегментация включает.Export.Import.Reporting.Security, и т.д.