我想爲我的Linq To SQL代碼設置單元測試。我的代碼使用System.Data.Linq.Table類(由設計者生成)。Typemock是唯一可以模擬Linq To SQL Table類的框架嗎?
因爲這個類是密封的,構造函數是內部的,它完全是impervious to unit testing frameworks like Rhino Mocks。 (除非你想改變你的代碼來使用存儲庫模式,我寧願不使用它。)
Typemock可以(一些如何)模擬這個類。 (以here爲例。)
但是,Typemock也是800美元的許可證。我看不到我的僱主很快就會出現這種情況。
所以這裏是問題。有沒有其他嘲笑框架不依賴於接口來創建模擬?
編輯:代碼示例,我需要測試:
public class UserDAL : IUserDAL
{
private IDataClassesDataContext _ctx;
public UserDAL()
{
string env = ConfigurationManager.AppSettings["Environment"];
string connectionString = ConfigurationManager
.ConnectionStrings[env].ConnectionString;
_ctx = new DataClassesDataContext(connectionString);
}
public UserDAL(IDataClassesDataContext context)
{
_ctx = context;
}
public List<User> GetUsersByOrganization(int organizationId)
{
IOrderedQueryable<User> vUsers =
(from myUsers in _ctx.Users
where myUsers.Organization == organizationId
orderby myUsers.LastName
select myUsers);
return vUsers.ToList();
}
public bool IsUserInOrganization(User user, int orgainzationID)
{
// Do some Dal Related logic here.
return GetUsersByOrganization(orgainzationID).Contains(user);
}
}
我已經短路這件事,使之更易於閱讀。這個想法是,我有一些代碼(如IsUserInOrganization
調用另一個,做一個LINQ查詢方法(如GetUsersByOrganization
)。
我想單元測試IsUserInOrganization
方法,不要做,我就需要模擬_ctx.Users 。這是一個表類(被密封並且具有內部的構造函數)
有兩點需要注意: 1.測試IsUserInOrganization通常應該從測試GetUsersByOrganization除了在集成測試分開;他們不會做同樣的事情。 GetUsersByOrganization的測試通常會包含IsUserInOrganization中特定用法的覆蓋範圍。如果在IsUserInOrganization方法中沒有額外的代碼,則沒有理由測試該方法,因爲無論如何,測試GetUsersByOrganization應覆蓋相關的情況。 基本上,在這種情況下,你想測試錯誤的東西,在我看來。 – 2009-12-08 18:12:13
一個叫另一個。無需將它卸載到不同的課程中,如何在不調用其他課程的情況下測試它? – Vaccano 2009-12-08 18:13:44
你不能。事實上,這是一種代碼味道。 – 2009-12-08 18:24:10