这个单元测试EF有问题

时间:2015-02-02 09:15:09

标签: c# asp.net-mvc entity-framework unit-testing ef-code-first

首先是单元测试和EF代码的新功能 我试图通过使用EF测试函数将数据添加到数据库中。 我不知道我的代码有什么问题,它应该会失败,但它会通过 这是m测试功能

[TestClass]
public class ProspectControllerTest
{
    [TestMethod]
    public void Index()
    {     
     DataContext context = new DataContext();
           Seller c = new Seller
           {
               SellerName = "test20",
               SellerDivision = "test20",
               SellerCity  = "City410",
               Active = true,

           };
        context.sellers.Add(c);

           context.SaveChanges();


           Seller s = (from d in context.sellers
                       where d.SellerId == c.SellerId
                       select d).Single();
           //This shouldent pass because there is no records in the db !
           c.SellerName.Equals(s.SellerName);

       }
    }
}

这是班级

  public class Seller
{
    [Key]
    public int SellerId { get; set; }
    public string SellerName { get; set; }
    public string SellerDiv { get; set; }
    public string SellerCity { get; set; }

    public Boolean Active { get; set; }

    public Div Div { get; set; }
    public ICollection<Prospect> prospects { get; set; }
}

另一个问题,这个测试是否将任何数据存储到db中?我应该能够在数据库中查找记录吗?

2 个答案:

答案 0 :(得分:1)

更改以下行

//This should fail
c.SellerName.Equals("asdfsadfasdfsadfsadf");

使用

Assert.AreEqual<string>("asdfsadfasdfsadfsadf", c.SellerName);

断言语句验证您的测试输出。

如果您要验证是否在DB中插入了正确的对象,请使用以下断言语句进行验证。

Assert.IsNotNULL(s);
Assert.AreEqual<string>("asdfsadfasdfsadfsadf",c.SellerName);

答案 1 :(得分:0)

您必须在测试方法中使用Mock来执行插入数据库之类的操作(但它不会在用于运行代码的数据库中插入查询但是它不会保存数据库,因为使用模拟)。

注意:使用MOCK概念来实现此目的。

Assert.AreEqual(c.SellerName, "asdfsadfasdfsadfsadf");

使用断言检查值。