Я учусь пользоваться Nunit.
У меня есть интерфейс под названием «IMenuService».У этого интерфейса есть один метод, который предоставляет menuType, он возвращает список запрошенных menuItem.
На самом деле я создал простую реализацию под названием "StaticMenuService", которая содержит два статических меню: admin / user.StaticMenuService не требует никакого репозитория, потому что его данные зашифрованы, поэтому у его конструктора нет параметров.
Я бы хотел протестировать методы «GetMenu (тип MenuType)», используя два списка тестов, которые присутствуют в админ / меню, но я нене знаю, как пройти этот список тестов, так как StaticMenuService не имеет точки ввода данных.
Я думаю, что нужно изменить конструктор «StaticMenuService», добавив два параметра (UserMenu, AdminMenu), но в этом случае я изменяю только реальный классдля создания теста, и я думаю, что это неправильно, не так ли?
Как я могу использовать свои поддельные данные для реализации тестов?
Это то, что я начал
public class MenuServiceTest
{
[SetUp]
public void SetUp()
{
List<MenuContainerItem> AdminMenuContainer;
List<MenuContainerItem> UserMenuContainer;
MenuPageItem adminPageTest1 = new MenuPageItem()
{
Id = "TEST_ADMIN_PAGE_1",
PageName = "admin test 1",
Url = "/admin/test1"
};
MenuPageItem adminPageTest2 = new MenuPageItem()
{
Id = "TEST_ADMIN_PAGE_2",
PageName = "admin test 2",
Url = "/admin/test2"
};
MenuContainerItem AdminBasePagesTest = new MenuContainerItem()
{
Id = "ADMIN_CONTAINER_TEST",
Icon = "preferences",
ContainerName = "container test",
Pages = new List<MenuPageItem>() { adminPageTest1 , adminPageTest2}
};
AdminMenuContainerTest = new List<MenuContainerItem>() { AdminBasePagesTest };
UserMenuContainerTest = new List<MenuContainerItem>();
}
[TestCase(MenuType.ADMIN)]
[TestCase(MenuType.USER)]
public void IMenuServiceReturnsAlwaysAList(MenuType type)
{
//var mockData = new Mock<>
//how can I pass AdminMenuContainerTest and UserMenuContainerTest to an instance of StaticMenuService?
}
}
DataModels
public class MenuPageItem
{
public string Id { get; set; }
public string PageName { get; set; }
public string Url { get; set; }
}
public class MenuContainerItem
{
public string Id { get; set; }
public string ContainerName { get; set; }
public string Icon { get; set; }
public IList<MenuPageItem> Pages { get; set; }
}
public enum MenuType
{
ADMIN = 0,
USER = 1
}
Интерфейсы
public interface IMenuService
{
IList<MenuContainerItem> GetMenu(MenuType type);
}
StaticMenuService
public class StaticMenuService : IMenuService
{
private List<MenuContainerItem> AdminMenuContainer;
private List<MenuContainerItem> UserMenuContainer;
public StaticMenuService()
{
MenuPageItem adminPageUsers = new MenuPageItem() {
Id = "ADMIN_PAGE_1",
PageName = "gestione utenti",
Url = "/admin/users"
};
MenuPageItem adminPageRoles = new MenuPageItem() {
Id = "ADMIN_PAGE_2",
PageName = "gestione ruoli",
Url = "/admin/roles"
};
MenuPageItem adminPageUserRoles = new MenuPageItem() {
Id = "ADMIN_PAGE_3",
PageName = "gestione utenti - ruoli",
Url = "/admin/userRoles"
};
MenuContainerItem AdminBaseManagerPages = new MenuContainerItem() {
Id = "ADMIN_CONTAINER",
Icon = "preferences",
ContainerName = "Gestione",
Pages = new List<MenuPageItem>() { adminPageUsers, adminPageRoles, adminPageUserRoles }
};
AdminMenuContainer = new List<MenuContainerItem>() { AdminBaseManagerPages };
UserMenuContainer = new List<MenuContainerItem>();
}
public IList<MenuContainerItem> GetMenu(MenuType type)
{
if(type == MenuType.ADMIN)
{
return AdminMenuContainer.AsReadOnly();
}
if(type == MenuType.USER)
{
return UserMenuContainer.AsReadOnly();
}
return new List<MenuContainerItem>().AsReadOnly();
}
}
Любая помощь, совет или объяснение приветствуется.