Como usar o teste de unidade integrada no VS2008 para testar a classe abstrata

votos
2

Eu não consigo encontrar qualquer informação sobre se ele pode fazer isso.

Eu tenho um par de métodos protegidos dentro da classe abstrata e quiser testar estes.

Eu não quero herdar da classe e testar a sua implementação (além isso é tecnicamente não estritamente testes de unidade, também VS2008 não vai deixar você testar métodos herdados).

Eu gostaria de resolver este problema dentro do contexto dos testes de unidade integrados ... Estou ciente de que nUnit por exemplo, irá permitir que você faça isso.

Alguma ideia? sugestões?

Publicado 19/05/2009 em 13:43
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

VS2008 pode testar métodos privados e protegidos herdados de classes base, mesmo os abstratos.

Se você está feliz testando desta forma, em seguida, clique direito sobre o código a ser testado e criar testes de unidade.

Aqui está um exemplo de um pedaço de código que estou usando para testar uma função privada, herdada, de uma classe abstrata:

    [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");
    }

Fora desse lote a parte mais importante é:

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

Isso me permite acessar a função privada herdou "GetScheduledTime"

Respondeu 27/05/2009 em 17:53
fonte usuário

votos
1

Tente RhinoMocks . Eles podem criar uma classe derivada on the fly (a chamada falsa parcial) onde você pode chamar seus métodos.

Você vai precisar de um quadro de simulação de qualquer maneira para escrever bons testes de unidade. Aqui está alguma documentação , o que poderia dar-lhe uma impressão.

Respondeu 19/05/2009 em 13:47
fonte usuário

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