代码之家  ›  专栏  ›  技术社区  ›  Morasiu

如何在ASP中使用依赖注入测试控制器。XUnit的网络核心?

  •  0
  • Morasiu  · 技术社区  · 8 年前

    我正在写我的ASP。NET Core Web API,我想开始用XUnit编写单元测试(我知道,现在有点晚了,但是,嘿,晚一点总比没有好),但我这里有一些复杂的依赖注入。这是我的样本 控制器 课程:

    public class UnitController : MyController {
    
      private readonly MyContext _context;
    
      public UnitController(MyContext context) {
        _context = context;
      }
    }
    

    MyContext 课程:

      public class MyContext : DbContext {
        private readonly IHttpContextAccessor _httpContext;
    
        public MyContext(DbContextOptions options, IHttpContextAccessor httpContext) : base(options) {
          _httpContext = httpContext;
        }
      }
    

    还有我的 配置服务 方法 创业。反恐精英 :

    public void ConfigureServices(IServiceCollection services) {
      services.AddDbContext<MyContext>(options => options.UseMySql(Configuration.GetConnectionString("MyContext"))
        .ConfigureWarnings(warnings => warnings.Ignore(RelationalEventId.QueryClientEvaluationWarning)));
      services.AddHttpContextAccessor();
      services.AddMvc();
    }
    

    还有我可怜的XUnit班:

      public class UnitControllerTest {
        private readonly MyContext _context;
    
        public UnitControllerTest() {
          var configuration = new Mock<IConfiguration>().Object;
          var dbOptions = new DbContextOptionsBuilder().UseMySql(configuration.GetConnectionString("MyContext"));
          _context = new Mock<MyContext>(dbOptions).Object;
        }
    
        [Fact]
        public void AddUnit_InvalidModel_ShouldReturnBadRequest() {
          var controller = new UnitController(_context);
          var testUnit = new Unit();
          var result = controller.AddUnit(testUnit);
    
          Assert.Equal(typeof(BadRequestObjectResult), result.GetType());
        }   
      }
    

    我的问题是,

    如何正确编写测试?

    0 回复  |  直到 8 年前