2013-02-21 25 views
5

Tôi đang tạo một thử nghiệm đơn vị gọi phương thức tác vụ tạo. Phương thức tạo nhiệm vụ gọi một số đối tượng bên ngoài giả định là mục đích của thử nghiệm của tôi, nhưng bên trong phương pháp thử nghiệm của tôi cũng có một cuộc gọi SaveChanges để lưu tác vụ của tôi. Điều tôi đang cố gắng làm là cắt lớp DbContext bên trong System.Data.Entity để phương pháp SaveChanges không còn truy cập cơ sở dữ liệu nữa.Làm thế nào để Shim DbContext với Microsoft Fakes?

Tôi đã thêm một hội đồng giả cho System.Data.Entity nhưng khi tôi sử dụng System.Data.Entity .Fakes nó nói "không thể giải quyết biểu tượng 'Fakes'", mặc dù tôi có thể truy cập System.Data.Fakes (nhưng tôi have't thêm một hội đồng giả cho System.Data)

Tôi đã giả mạo các phương pháp khác trong ngữ cảnh thực thể của mình, nhưng tôi không thể giả mạo phương thức SaveChanges trên thực thể của tôi vì phương thức được kế thừa từ DbContext.

ShimDBEntities.AllInstances.SaveChanges = (x) => { ... }; 

đoạn trên của mã cho biết "không thể giải quyết biểu tượng 'SaveChanges'".

Vậy làm cách nào để tôi có thể sử dụng phần mềm Microsoft Fakes?

+1

Tôi không phải là như vậy một fan hâm mộ của miếng chêm, đặc biệt là trên DbContext của bạn. Tôi nghĩ bạn có thể cần phải xem xét lại thiết kế của mình để đơn vị kiểm tra mã của bạn tốt hơn. Kiểm tra bài đăng trên blog của tôi về chủ đề này: http://sitecore.paragon-inc.com/resources/blogs-posts/the-repo-man – IronMan84

+1

cảm ơn, nhưng dự án đã được sản xuất và thiết kế chưa được nghĩ đến có thể kiểm tra được nên tôi đã cố gắng làm việc với những gì tôi có –

Trả lời

2

Tôi đã quản lý để thực hiện việc này bằng cách tạo phương thức SaveChanges trong lớp BaseRepository của mình và sử dụng nó trong tất cả các kho lưu trữ có nguồn gốc của tôi nơi tôi có db.SaveChanges.

Sau đó, tôi shimed tôi BaseRepository để phương pháp SaveChanges của tôi sẽ không làm gì cả

Các vấn đề liên quan