使用存储库模式在SQLite中测试crud操作



我正在测试老师制作的应用程序。我添加了驱动程序类,所以每个订单都有一个与之相关的驱动程序,并将驱动程序作为外键放在我的订单类中(所以我有一对一的关系(

public class Order {
[ForeignKey("Driver")]
public int DriverId { get; set; }
public int Id { get; set; }
public List<Item> Items { get; set; }
}
public class Driver {
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[Range(1, 5)]
public int Rating { get; set; }
}

然后我创建了添加、更新和删除驱动程序,并对数据库进行了迁移和更新。

现在我正在尝试测试所有这些功能,所以我进行了一些单元测试,但只有Add_customer和Add_derver通过了,其他所有功能都无法通过

所以我希望看看是否有人可以分享一些光

这是我的测试

[Test]
public void AddCustomer_ValidCustomer_ReturnsTrue() {
// Arrange
Customer customer = new Customer() {
Id = 1,
FirstName = "James",
LastName = "Cameron",
StreetAddress = "123 Sesame Street",
City = "New York City",
ZIP = "11111",
State = "NY",
PhoneNumber = "1111111111",
Email = "jc@terminator.com"
};
// Act
var result = uow.AddCustomer(customer);
// Assert
Assert.IsTrue(result);
var qCust = _context.Customers.Where(q => q.Id == 1).FirstOrDefault();
Assert.AreSame(qCust, customer);

}
[Test]
public void AddDriver_ValidDriver_ReturnsTrue() {
// Arrange
Driver driver = new Driver() {
ID = 1,
FirstName = "James",
LastName = "Cameron",
Rating = 4
};
// Act
var result = uow.AddDriver(driver);
// Assert
Assert.IsTrue(result);
var qDrive = _context.Drivers.Where(q => q.ID == 1).FirstOrDefault();
Assert.AreSame(qDrive, driver);

}
[Test]
public void RemoveDriver_ValidDriver_ReturnsTrue() {
// Arrange
Driver driver = new Driver() {
ID = 1,
FirstName = "James",
LastName = "Cameron",
Rating = 4
};
// Act
var result = uow.RemoveDriver(driver);
// Assert
var Drivera = _context.Drivers;

Assert.IsTrue(result);
var qDrive = _context.Drivers.Remove(driver);
Assert.AreNotEqual(Drivera, qDrive);

}

[Test]
public void UpdateDriver_ValidDriver_ReturnsTrue() {
Driver driver = new Driver() {
ID = 1,
FirstName = "James",
LastName = "Cameron",
Rating = 4
};
var result = uow.UpdateDriver(driver);
var qDrive = _context.Drivers.Where(q => q.ID == 1).FirstOrDefault();
Assert.AreSame(qDrive, driver);
}
}

}

它必须返回真正的才能工作

确保您的UOW使用与_context相同的对象?确保在设置模拟数据库上下文时,它被注入并分配给UOW和_context相同的对象。这可能是您的只读操作通过但其他操作失败的原因。

由于您将其命名为_context,我假设它是测试类的实例变量。因此,每当测试运行时,都会创建一个新的测试对象,从而创建_context。要测试添加以外的操作,应该假设_context为空。这意味着你应该首先添加驱动程序,然后测试删除它

最新更新