首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于xUnit测试的asp.net5 dbContext依赖注入

用于xUnit测试的asp.net5 dbContext依赖注入
EN

Stack Overflow用户
提问于 2016-01-15 06:53:38
回答 1查看 641关注 0票数 0

尝试将我的服务正确注入到我的单元测试中。在我的控制器中工作得很好,使用了在构造函数中传入DbContext的相同方法。

代码语言:javascript
复制
 public class PostTest
{

    public BlogContext db { get; set; }

    public PostTest(BlogContext Context)
    {
        db = Context;
    }

我随后的所有测试都失败了,原因是:

以下构造函数参数没有匹配的装置数据: BlogContext Context

我的OnConfigure设置是

代码语言:javascript
复制
  public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();

        // Adding CORS to api
        services.AddCors(options =>
        {
            options.AddPolicy("AllowAllOrigins", builder => builder.AllowAnyOrigin());
        });

        string connstr = "Data Source=(localdb)\\ProjectsV12;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";


        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<BlogContext>(options =>
                options.UseSqlServer(connstr));

        //services.AddScoped<BlogContext>(provider => provider.GetService<BlogContext>());

    }

这是我的博客控制器的一个例子-它工作得很好。

代码语言:javascript
复制
[Route("api/[controller]")]
public class BlogController : Controller
{

    private BlogContext db;

    public BlogController(BlogContext dbContext)
    {
        db = dbContext;

      //  db = new BlogContext();

    }

    //public BlogContext db;


    [HttpGet("{id}")]
    //public IEnumerable<Post> Get()
    public Post Get(int id)
    {
        try {
            Post FoundPost = db.Posts.Where(x => x.id == id).Single();
            return FoundPost;
        }
        catch
        {
            return new Post { id = 0 };
        }  
    }

如有任何建议,我们将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2016-01-15 07:01:30

您需要在测试类中进行稍微不同的操作:

代码语言:javascript
复制
 public class BlogControllerFacts
 {
        public class Index
        {
            [Fact]
            public void GetDoesSomething()
            {
                // Arrange
                BlogContext db = new BlogContext(); // This should be mocked somehow
                const int id = 5;
                var controller = new BlogController(db);

                // Act
                var result = controller.Get(id);

                // Assert something
            }

        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34801299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档