2017-07-08 5 views
0

dieser Test immer null zurück, und Test immer scheitern ... aber wenn ich die projet laufen alle funktioniert und Daten normalerweise zurückgeben, um dieses Projekt RavenDB mitASP.NET Kerntest xUnit-Controller

-Controller

[Route("api/[controller]")] 
public class CategoryController : Controller 
{ 
    private readonly AppDbContext _context = new AppDbContext(); 

    // GET: api/category 
    [HttpGet("{id}")] 
    public async Task<JsonResult> Get(string id) 
    { 
     using (IAsyncDocumentSession session = _context.SessionAsync){ 
      var result = await session.LoadAsync<Category>(id); 
      return Json(result); 
     } 
    } 
} 

und xUnit zu Tests mit

[Fact] 
public async Task GetShouldReturnCategory() 
{ 
    // Arrange 
    var _categoryController = Substitute.For<CategoryController>(); 
    var category = CreateCategory(); 

    // Act 
    var result = await _categoryController.Get(category.Result.Id); 

    //Asserts here 
} 

Antwort

2

Base auf Ihre Frage, Systemtest (SUT) ist CategoryController. Also macht es keinen Sinn zu spotten CategoryController; Stattdessen möchten Sie AppDbContext vortäuschen.

Wenn Sie einen Controller Unit testen möchten, sollten Sie Dependency Inject von ASP.NET Core verwenden und seine Abhängigkeiten über die Konstruktorinjektion injizieren. Mit anderen Worten, Sie sollten nicht neue verwenden.

Normalerweise injizieren wir Interface statt Beton Klasse, so dass wir es leicht verspotten können.

Ihr Code fehlt zu viele Stücke, so konnte ich Ihnen nur ein direkt geben. Wenn Sie mehr Details wünschen, können Sie sich dieses Beispielprojekt unter GitHub ansehen, das NSubstitute und XUnit verwendet.