尝试将我的服务正确注入到我的单元测试中。在我的控制器中工作得很好,使用了在构造函数中传入DbContext的相同方法。
public class PostTest
{
public BlogContext db { get; set; }
public PostTest(BlogContext Context)
{
db = Context;
}我随后的所有测试都失败了,原因是:
以下构造函数参数没有匹配的装置数据: BlogContext Context
我的OnConfigure设置是
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>());
}这是我的博客控制器的一个例子-它工作得很好。
[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 };
}
}如有任何建议,我们将不胜感激
发布于 2016-01-15 07:01:30
您需要在测试类中进行稍微不同的操作:
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
}
}
}
}https://stackoverflow.com/questions/34801299
复制相似问题