簡體   English   中英

如何填充 Mock<dbset> 在 Nunit 與最小起訂量?</dbset>

[英]How to fill a Mock<DbSet> in Nunit with Moq?

我正在嘗試用測試實體填充模擬數據庫集,但我只會在異常后出現異常。 我對 Nunit 測試很陌生,還沒有真正掌握它。 我正在嘗試在我的存儲庫中測試一個簡單的刪除方法,這里是該方法的代碼:

public async Task DeleteQuestion(Question questionToRemove)
    {
        if (questionToRemove is not null)
        {
            var questionsAnswers = await _context.Answers.Where(a => a.Question == questionToRemove).ToListAsync();
            foreach (Answer a in questionsAnswers)
            {
                _context.Answers.Remove(a);
                await _context.SaveChangesAsync();
            }

            _context.Questions.Remove(questionToRemove);
            await _context.SaveChangesAsync();                
            var questions = await _context.Questions.Where(q => q.Quiz == questionToRemove.Quiz).ToListAsync();
            int order = 1;
            foreach (Question question in questions)
            {
                question.QuestionOrderId = order;
                await _context.SaveChangesAsync();
                order++;
            }
        }

    }

這是我寫的測試:

 public async Task DeleteQuestionFunction()
    {
        //Arrange
        Question testQuestion = new Question { QuestionId = 1, QuestionText = "Test" };
        Answer testAnswer = new Answer { Question = testQuestion, AnswerId = 1, AnswerText = "TestAnswer" };
        _appDBContextMock.SetupAdd(x => x.Questions.Add(testQuestion));
        _appDBContextMock.SetupAdd(x => x.Answers.Add(testAnswer));

        //Act
        var questionListcomponent = new QuestionListComponent();
        questionListcomponent.DeleteQuestion(testQuestion);

        var testresult = await _questionRepositoryMock.Object.GetQuestionById(testQuestion.QuestionId);

        //Assert
        Assert.That(testresult, Is.Null);

    }

當我只使用 Setup 方法時,我得到了這個異常:

System.NotSupportedException: Unsupported expression: x => x.Questions 不可覆蓋的成員(此處:AppDbContext.get_Questions)不得用於設置/驗證表達式。

現在使用 SetupAdd function 我得到這個異常:

System.ArgumentException:無法實例化 class 的代理:TietoQuiz.Models.DbContexts.AppDbContext。 找不到無參數的構造函數。 (參數'constructorArguments')

我認為我的問題是我不知道如何正確設置模擬數據庫集。 我嘗試谷歌,但我發現了很多不同的方式和很多評論說“不推薦/錯誤的方式”,這對新手來說非常混亂,所以我希望這里的人能幫忙!

如果要使用上下文編寫測試,則必須創建自己的上下文並在運行后驗證數據。 您不能將模擬與不可覆蓋的方法一起使用。

您必須使用臨時文件來創建此上下文,而不是更改您的生產數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM