C# 如何测试存储库?
tag1 tag2 tag3已创建并存在于数据库中 我做错了什么? 能给我一个解决方案吗C# 如何测试存储库?,c#,.net,asp.net-mvc,git,C#,.net,Asp.net Mvc,Git,tag1 tag2 tag3已创建并存在于数据库中 我做错了什么? 能给我一个解决方案吗 GUID在另一个.cs中配置 public class UnitTest1 { TagRepo _tagRepo = new TagRepo(); [TestMethod] public void Test_Method_Delete() { Tag tag = new Tag() { Name = "Test tag
GUID在另一个.cs中配置
public class UnitTest1
{
TagRepo _tagRepo = new TagRepo();
[TestMethod]
public void Test_Method_Delete()
{
Tag tag = new Tag()
{
Name = "Test tag5"
};
Tag tag1 = new Tag()
{
Name = "Test tag3"
};
Tag tag2 = new Tag()
{
Name = "Test tag4"
};
_tagRepo.Delete(GetById(tag.Id));
}
}
您没有在标记变量上设置Id属性,因此它肯定无法从数据库中加载它 尝试将测试方法更改为以下内容:
HasKey(key => key.ID);
Property(key => key.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("Id");
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ConfigTag());
base.OnModelCreating(modelBuilder);
}
出于测试目的,使用工作单元模式和虚拟上下文。
GUID在另一个.cs HasKey(key=>key.ID)中配置;属性(key=>key.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName(“ID”);protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Configurations.Add(new ConfigTag());base.OnModelCreating(modelBuilder);}@McCorn但您没有在标记上设置Id属性,单元测试中的tag1或tag2变量那么GetById方法应该如何工作呢?它们都将具有Guid.Empty作为一个值,我怀疑您的数据库中是否存在该值。数据库中的Guid不是空的或null。它一直是generated@McCorn您可以尝试将在DB中生成的GUID分配给您的tag、tag1和tag2变量吗?由于要初始化的对象没有设置Id,因此无法唯一标识要删除的标记
HasKey(key => key.ID);
Property(key => key.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity).HasColumnName("Id");
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new ConfigTag());
base.OnModelCreating(modelBuilder);
}
[TestMethod]
public void Test_Method_Delete()
{
Tag tag = new Tag()
{
Id = Guid.Parse(""), // Inside the quotes use a valid Id from your database.
Name = "Test tag5"
};
Tag tag1 = new Tag()
{
Name = "Test tag3"
};
Tag tag2 = new Tag()
{
Name = "Test tag4"
};
_tagRepo.Delete(GetById(tag.Id));
}