Как я могу смоделировать представление / контроллер, используя NUnit и Moq? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть приложение C# (это приложение Cocoa), и мне нужно протестировать представление / контроллер, используя NUnit и Moq, и это немного сложно. Точнее, у меня есть многоуровневое приложение, подключенное к базе данных sqlite- net. Я хочу проверить метод добавления. Это одна из моих таблиц:

public class User
{
        [PrimaryKey, AutoIncrement]
        public int ID { get; set; }
        public String email { get; set; }
        public String password { get; set; 
}

Я создал для этого DBContext, в котором я создаю базу данных, таблицы и подключаюсь к базе данных. Будучи многоуровневым приложением, у меня также есть UserRepo и UserBusinessLogi c, в которых я делаю все запросы. У меня вопрос, как я могу проверить работу addUser? Я должен отметить, что я использую sqlite-pcl- net в качестве базы данных. Я уже пробовал это:

var mock = new Mock<IUserBLL>();
            User user = new User
            {
                email = "a@yahoo.com",
                password = "1234",

            };
var controller = new CreateController(mock.Object);

Но мой тест завершается неудачно с нулевым исключением при попытке создать контроллер. Я думаю о настройке для макета? Это мой контроллер:

public partial class CreateController : NSViewController
{
IUserBLL userBLL;

public CreateAccountController(IntPtr handle) : base(handle)
{
   Initialize();
   userBLL = new UserBLL();
}
/* I AM USING THIS ONE */
public CreateAccountController(IUserBLL userBLL) : base()
{
   Initialize();
   this.userBLL = userBLL;
}

Мне нужно проверить контроллер и его методы, а не только методы из базы данных.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Для этого случая лучше использовать базу данных в памяти. Ваш случай должен быть примерно таким

//Create MemoryDB
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
                .UseInMemoryDatabase(databaseName: "AddUserDb").Options;
var dbContext = new ApplicationDbContext(options);
// Initialize service
var service = new IUserBLL();
// Get AddUser function
service.AddUser();
0 голосов
/ 26 апреля 2020

Существуют ли другие требования для конструктора вашего контроллера, кроме экземпляра IUserBLL? Требует ли Initialize() или базового эталонного класса NSViewContoller ничего, что не было бы доступно или создано в ходе этого теста?

В качестве примечания, создаваемая вами одиночная переменная "пользователь" вообще не используется. Убедитесь, что вы приближаетесь к этому тесту с точки зрения «Arrange, Act, Assert». После того, как вы настроили части, какое действие на контроллере вы пытаетесь проверить? Что, по вашему мнению, должно быть результатом этого действия в вашем смоделированном репозитории?

Отредактировано: Исходя из вашего дополнительного кода, становится очевидным предположение на ASP NET Core MVC на основании new Controller() было неправильно (похоже, вы используете Xamarin), поэтому удалите ссылки.

...