Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 如何在VS2008中使用集成单元测试来测试抽象类_Visual Studio 2008_Unit Testing_Abstract Class - Fatal编程技术网

Visual studio 2008 如何在VS2008中使用集成单元测试来测试抽象类

Visual studio 2008 如何在VS2008中使用集成单元测试来测试抽象类,visual-studio-2008,unit-testing,abstract-class,Visual Studio 2008,Unit Testing,Abstract Class,我找不到任何关于它是否能做到这一点的信息 我在抽象类中有几个受保护的方法,我想测试它们 我不想从类继承并测试其实现(除此之外,从技术上讲,这不是严格的单元测试,VS2008也不允许您测试继承的方法) 我想在集成单元测试的上下文中解决这个问题。。。例如,我知道nUnit将允许您这样做 有什么想法吗?建议?试试看。他们可以动态创建派生类(所谓的部分模拟),您可以在其中调用方法 无论如何,您都需要一个模拟框架来编写好的单元测试。这是一个可以给您留下印象的方法。VS2008可以测试从基类继承的私有和受保

我找不到任何关于它是否能做到这一点的信息

我在抽象类中有几个受保护的方法,我想测试它们

我不想从类继承并测试其实现(除此之外,从技术上讲,这不是严格的单元测试,VS2008也不允许您测试继承的方法)

我想在集成单元测试的上下文中解决这个问题。。。例如,我知道nUnit将允许您这样做

有什么想法吗?建议?

试试看。他们可以动态创建派生类(所谓的部分模拟),您可以在其中调用方法


无论如何,您都需要一个模拟框架来编写好的单元测试。这是一个可以给您留下印象的方法。

VS2008可以测试从基类继承的私有和受保护的方法,甚至是抽象类

如果您乐于以这种方式进行测试,那么右键单击要测试的代码并创建单元测试

下面是一段代码的示例,我正在使用它从抽象类测试私有的继承函数:

    [TestMethod()]
    [DeploymentItem("PA Manager.dll")]
    public void GetNextScheduledTimeTest4()
    {
        TimeWheel timeWheel = new TimeWheel(1000, null);
        AnnouncementSchedule schedule = new AnnouncementSchedule();
        schedule.StartDate = DateTime.UtcNow.Date - TimeSpan.FromDays(1);
        schedule.StartTime = DateTime.Parse("09:00:00");
        schedule.EndDate = DateTime.UtcNow.Date;
        schedule.EndTime = DateTime.Parse("14:30:00");
        schedule.Interval = DateTime.MinValue + TimeSpan.Parse("01:00:00");
        schedule.DaysValid.ValidDay = new Day[7];
        schedule.DaysValid.ValidDay[0] = Day.Monday;
        schedule.DaysValid.ValidDay[1] = Day.Tuesday;
        schedule.DaysValid.ValidDay[2] = Day.Wednesday;
        schedule.DaysValid.ValidDay[3] = Day.Thursday;
        schedule.DaysValid.ValidDay[4] = Day.Friday;
        schedule.DaysValid.ValidDay[5] = Day.Saturday;
        schedule.DaysValid.ValidDay[6] = Day.Sunday;

        //// test for the next interval time NOT being valid, but the time period and day for the schedule is.

        PaAnnouncementSchedule paAnnouncementSchedule = new PaAnnouncementSchedule(timeWheel, schedule);
        PrivateObject param0 = new PrivateObject(paAnnouncementSchedule); 
        PaAnnouncementSchedule_Accessor target = new PaAnnouncementSchedule_Accessor(param0); 
        DateTime currentTime = DateTime.Parse("14:07:00");
        DateTime actual;
        DateTime expected = DateTime.MaxValue;
        actual = target.GetNextScheduledTime(currentTime);
        Assert.AreEqual(expected, actual, "Expected time to be DateTime.MaxValue");
    }
从这一部分中,重要的部分是:

PaAnnouncementSchedule paAnnouncementSchedule = new PaAnnouncementSchedule(timeWheel, schedule);
PrivateObject param0 = new PrivateObject(paAnnouncementSchedule); 
PaAnnouncementSchedule_Accessor target = new PaAnnouncementSchedule_Accessor(param0);

这允许我访问私有继承函数“GetScheduledTime”

刚刚读过,我将来可能会使用这个框架。但是在我为这个项目做这个之前,我试图验证VS2008没有我所需要的功能。谢谢你的回复!罗夫现在回顾这一点(4年后),我认为我应该把你的答案标记为正确!对不起,谢谢,我也试过类似的。。。你为我很好地澄清了语法。