2009-07-17 152 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 ...

除此之外,它可能只是没有正确的连接字符串...