Tôi quan tâm đến việc viết các bài kiểm tra đơn vị (sử dụng NUnit) cho một số lớp dịch vụ được tạo bằng ServiceStack, sử dụng "API mới" (kế thừa từ ServiceStack.ServiceInterface.Service). Thuộc tính Db của dịch vụ được tự động kết nối đúng cách khi được lưu trữ trong một ứng dụng ASP.NET bằng cách sử dụng AppHost, nhưng tôi dường như không thể tìm ra kỹ thuật thích hợp khi chạy bên ngoài môi trường đó. Tôi thấy nhiều không gian tên và lớp liên quan đến thử nghiệm trong ServiceStack nhưng không thể tìm thấy một ví dụ rõ ràng khi thuộc tính Db của dịch vụ được tiêm, trái ngược với việc chỉ thiết lập một nhà máy kết nối trực tiếp và sau đó gọi các phương thức mở rộng IDbConnection khác nhau (Chèn , Chọn, v.v.).Làm cách nào để chèn Db vào các lớp Dịch vụ khi kiểm tra đơn vị ServiceStack.OrmLite với NUnit?
Tôi đã thử có lớp thử nghiệm kế thừa từ ServiceStack.ServiceInterface.Testing.TestBase và ghi đè phương thức Định cấu hình để đăng ký IDbConnectionFactory (sử dụng ": memory:"), cũng như thiết lập OrmLiteConfig.DialectProvider = SqliteDialect.Provider;
trong TestFixtureSetUp của tôi, nhưng tôi tiếp tục để có được một NullReferenceException khi gọi các phương thức dịch vụ của tôi (tại ServiceStack.ServiceInterface.Service.get_Db()). Có vẻ như các container Funq không phải là tự động dây bất cứ điều gì.
Bản thân SQLite được thiết lập đúng cách, tôi có thể xác nhận với các bài kiểm tra đơn vị đơn giản bỏ qua các lớp dịch vụ của tôi và chỉ cần thực hiện các cuộc gọi IDbConnection trực tiếp.
Tôi đang thiếu gì?
Sửa
Dường như các dịch vụ đơn vị thử nghiệm ServiceStack đòi hỏi sự tồn tại của một máy chủ và một khách hàng, mặc dù có vẻ như có nhiều cách để thiết lập này để tránh những chi phí serialization (sử dụng DirectServiceClient, như được hiển thị here) - mặc dù tôi đã không thành công trong việc làm điều đó để làm việc trong trường hợp của tôi. Tôi quản lý để có được điều này làm việc bằng cách sử dụng một cách tiếp cận AppHostHttpListenerBase (xem here) mặc dù nó là nhiều hơn một bài kiểm tra tích hợp hơn một đơn vị một (và là phù hợp chậm hơn).
này đã làm việc một cách hoàn hảo! Cảm ơn! Tôi đã phải chuyển đổi một trong những ExpectedExceptions của tôi trở lại một trong những (HttpError) bên trong từ wrapper (WebServiceException) nhưng điều đó có ý nghĩa cho rằng tôi không còn đi qua một khách hàng dịch vụ. –