Tôi đang sử dụng PetaPoco trên dự án hiện tại của mình dưới dạng ORM vi mô và tôi phải nói rằng tôi thích nó. Tuy nhiên, tôi thấy mình phải vật lộn với kịch bản đơn giản - Dịch vụ kiểm tra đơn vị sử dụng PetaPoco.DatabaseCách sử dụng dịch vụ thử nghiệm đơn vị đang sử dụng PetaPoco.Database
public class MyService : IMyService
{
private readonly PetaPoco.Database _database;
public MyService(PetaPoco.Database database)
{
_database = database;
}
public void SaveSomething(MyObject myObject)
{
//...custom logic
_database.Save(myObject);
}
}
Tôi đang sử dụng IoC (Castle.Windsor) cho tiêm cả IMyService và PetaPoco.Database ở bất cứ nơi nào cần thiết.
Bây giờ, khi tôi cố gắng để kiểm tra đơn vị dịch vụ của tôi tôi vẫn chưa thể đúng cách giả còn sơ khai PetaPoco.Database để xác minh rằng Lưu phương pháp đã được gọi đúng cách. Tôi đang sử dụng NUnit và Rhino.Mocks để kiểm tra đơn vị và chế nhạo.
[TestFixture]
public class MyServiceTests
{
private PetaPoco.Database _database;
[SetUp]
public void SetUp()
{
_database = MockRepository.GenerateMock<Database>("");
}
[Test]
public void ShouldProperlySaveSomething()
{
//Arrange
var myObject = new MyObject();
_database.Expect(db => db.Save(Arg<MyObject>.Is.Anything));
var myService = new MyService(_database);
//Act
myService.SaveSomething(myObject);
//Assert
_database.VerifyAllExpectations();
}
}
Tôi biết rằng điều này có thể được giải quyết nếu tôi trích xuất một giao diện từ PetaPoco.Database và làm mocking chống lại nó, hoặc bằng cách ảo hóa phương pháp PetaPoco rằng tôi muốn thử, nhưng vấn đề là tôi không muốn thực hiện thay đổi đối với PetaPoco.
Điều này có thể thực hiện được không?
Công việc tuyệt vời @Schotime, đó chính xác là những gì tôi cần! Tôi tò mò mặc dù, có bạn đã cố gắng để tạo yêu cầu kéo để codebase gốc? – ljubomir
Nhiều lần, nhưng tôi có nhiều tính năng hơn như một phần của thư viện bây giờ, với rất nhiều bản sửa lỗi để chúng gần như tách biệt nhau bây giờ. – Schotime
Có phải tất cả các tính năng của petapoco đều được hỗ trợ (chẳng hạn như các mẫu) hoặc có thiếu sót không? Nó có vẻ như ngã ba của bạn cũng làm những gì plugin này không PetaPoco.RelationExtensions. Bạn đang sử dụng cùng một mã?Tôi tự hỏi là bạn không thấy có bất kỳ tài liệu nào về một số tính năng của bạn vì vậy hy vọng tôi có thể sử dụng các ví dụ từ các plugin hiện có khác. – chobo2