2017-06-05 76 views
1

全新的測試,我有一個控制器是這樣的:如何使用XUnit編寫簡單的測試用例?

public class CheckRegController : Controller 
{ 
    private readonly ApplicationDbContext _context; 
    private readonly AppSettings _appSettings; 

    public CheckRegController(ApplicationDbContext context, IOptions<AppSettings> appSettings) 
    { 
     _context = context; 
     _appSettings = appSettings.Value; 
    } 

    [HttpGet] 
    public IActionResult Get(string var1, int numberusers) 
    { 
     //... 
    } 
} 

現在我已經加入其中,我想使用的xUnit和最小起訂量的測試項目。我只是想創建控制器就像我在一個非常簡單的項目都做的一個對象,但它不能在this.When工作,我想:

CheckRegController cr = new CheckRegController(); 

它說:

有沒有給定的參數對應於 所需的正式 參數 '語境' 'CheckRegController.CheckRegController(ApplicationDbContext, IOptions)' XUnitTestProjectOA

釷EN我試過了:

var moqHome = new Mock<ApplicationDbContext>(); 

但我不知道是否正確或者我需要做什麼? 如何通過_context_appsettings ??

回答

0

你在正確的軌道上。嘲笑依賴關係並將它們注入測試中的主題。

//Arrange 
var dbmock = new Mock<ApplicationDbContext>(); 
//...setup dbmock as needed to exercise test 
var options = new Mock<IOption<AppSetting>(); 
var appSetting = new AppSetting { 
    //...populate appSetting as needed to exercise test 
}; 
options.Setup(_ => _.Value).Returns(appSetting); 

var sut = new CheckRegController(dbMock.Object, options.Object); 
var var1 = "testing"; 
var numberusers = 2; 

//Act 
var actual = sut.Get(var1,numberusers) 

//Assert 
//...assert expected behavior to actual. 

我也建議抽象掉上下文以使控制器更易於維護。

+0

這正是我想要的......但在UnitTestProject的情況下,我們使用[TestMethod]屬性,並通過單擊測試用例我們可以運行任何測試用例,但在XUnitTestCase中,我有[Fact]屬性,我無法運行測試用例?如何運行它?我正在使用命令:dotnet test -method namespace.projectname.methodname?但它不起作用。 – Mogli

+0

它給我dbmock.object上的錯誤 - Castle.DynamicProxy.InvalidProxyConstructorArgumentsException:'無法實例化類的代理:abc.Data.ApplicationDbContext。? – Mogli

+0

@Mogli這就是爲什麼我已經提出了關於抽象數據庫上下文以提供更多靈活性的原因。 – Nkosi

相關問題