Как использовать интегрированное модульное тестирование в VS2008, чтобы проверить абстрактный класс

голоса
2

Я не могу найти любую информацию о том, может ли он сделать это.

У меня есть несколько защищенных методы внутри абстрактного класса и хочу проверить это.

Я не хочу, чтобы наследовать от класса и проверить его реализацию (помимо Thats технически не строго модульное тестирование, а также VS2008 не позволит вам испытать наследуемые методы).

Я хотел бы, чтобы решить эту проблему в контексте интегрированных модульных тестов ... Я знаю, что NUnit, например, позволит вам сделать это.

Есть предположения? предложения?

Задан 19/05/2009 в 11:43
источник пользователем
На других языках...                            


2 ответов

голоса
1

Попробуйте RhinoMocks . Они могут создать производный класс на лета (так называемый частичным макет) , где вы можете назвать свои методы.

Вам потребуется макет рамки в любом случае , чтобы написать хорошие модульные тесты. Вот некоторые документы , которые могли бы дать вам впечатление.

Ответил 19/05/2009 в 11:47
источник пользователем

голоса
1

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»

Ответил 27/05/2009 в 15:53
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more