试图将我的服务正确注入到我的单元测试中。 在我的控制器中工作正常, 在构造函数上使用与 DbContext 相同的传递方法。
public class PostTest
{
public BlogContext db { get; set; }
public PostTest(BlogContext Context)
{
db = Context;
}
我所有后续测试都由于以下原因而失败:
以下构造函数参数没有匹配的夹具数据: 博客上下文上下文
我的配置设置是
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 };
}
}
任何建议将不胜感激
您需要在测试类中稍微不同
: 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
}
}
}
}