2009-07-17 48 views
1

我在我的項目中使用Linq to SQL。我有一個調用單元測試時DataContext崩潰

DataContext db = new DataContext() 

代碼的一部分,該工程運行網站時,卻離我的單元測試中調用這個當如預期我得到一個錯誤對象未設置爲一個實例...

你知道這是爲什麼嗎?

我知道我應該模擬數據上下文進行測試,但只有兩個測試使用了我需要在項目的這個階段完成的測試。然後我會進去模擬。

我只是不明白爲什麼它不起作用。

編輯:

在我控制我行

   CandidateRegistrationViewModel viewModel = new CandidateRegistrationViewModel("PersonalDetails", candidate); 

模型有一個成員DB:

public class CandidateRegistrationViewModel 
{ 
    private EmployDirectDataContext db = new EmployDirectDataContext(); 

該類然後用分貝來填充選擇框。

它運行時,我運行,但在單元測試我創建datacontext時出現錯誤。

[TestMethod] 
    public void PersonalDetailsStepPostShouldRedisplayIfDOBSuppliedInWrongFormat() 
    { 
     // Arange 
     var controller = CreateCandidateController("Dean"); 
     repository.Add(FakeCandidateData.CreateCandidate(controller.member.UserId())); 

     FormCollection formCollection = FakeCandidateData.CreatePersonalDetailsStepFormCollection(); 
     formCollection["DOB"] = "24/2009/87"; //DOB in wrong format - should be dd/mm/yyyy 

     controller.ValueProvider = formCollection.ToValueProvider(); 

     // Act 
     ViewResult result = (ViewResult)controller.PersonalDetailsStep(formCollection); 

     // Assert 
     Assert.AreEqual("", result.ViewName); //ViewName is returned as empty if same as Action name 
    } 

的項目都具有相同的連接字符串中的應用程序/ web.config中

<add name="EmployDirectDBConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\EmployedDirectDB.MDF;Integrated Security=True;User Instance=True" 
     providerName="System.Data.SqlClient" /> 
+0

代碼是什麼樣的? – 2009-07-17 23:41:22

+0

我已經添加所有相關代碼 – ddd 2009-07-18 10:19:50

回答

0

測試數據上下文下降得更爲集成測試的範圍。這些模擬更適合您的存儲庫接口。您的存儲庫將在集成測試期間持有對DataContext對象的有效引用。

+0

我在原始文章中添加了更多詳細信息。我不測試datacontext,但測試需要datacontext剛纔運行,直到我嘲笑。但我想在這個里程碑之後添加嘲笑 – ddd 2009-07-18 10:22:35

+0

嗯,我不明白爲什麼它不起作用。這幾乎聽起來像是測試引擎的某種微妙的問題。我會考慮一下,但如果是我,我會把這個測試移到下一個里程碑,在那裏你會有嘲笑。 – 2009-07-18 15:52:09

0

您的單元測試程序集可能沒有正確的connectionstring編譯到設置中。這就是爲什麼我總是使用:

var db = new MyDataContext(SomeConfigClassIMade.ConnString) {...} 

所以我可以更嚴格地控​​制連接字符串的工作方式。

0

我不知道爲什麼你會想測試DataContext本身...(我可能是錯的,我相信有人會告訴我,如果我是)但你只是測試DataAccess或Repository類,使用DataContext ...

除此之外,它可能只是沒有正確的連接字符串...