2009-05-19 9 views
2

これを行うことができるかどうかについての情報はありません。VS2008の統合ユニットテストを使用して抽象クラスをテストする方法

私は抽象クラスの中にいくつかの保護されたメソッドを持っており、これらをテストしたいと考えています。

私はクラスから継承してその実装をテストしたくないです(厳密にはユニットテストではなく、VS2008では継承されたメソッドをテストできません)。

私は統合ユニットテストのコンテキスト内でこの問題を解決したいと思います...たとえば、nUnitではこれを行うことができます。

どのような考えですか?提案?

答えて

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"にアクセスすることを可能にします

+0

ありがとう、私は似たようなことをしようとしていた...あなたは私のために構文をうまく解消しました。 –

1

Try RhinoMocks彼らはあなたのメソッドを呼び出すことができる派生クラス(いわゆる部分擬似)をオンザフライで作成することができます。

良い単体テストを書くには、とにかくモックフレームワークが必要です。あなたに印象を与えることができるsome documentationがあります。

+0

私はおそらくこのフレームワークを将来読んでいます。しかし、私はそれを行う前に - つまり、このプロジェクトでは、VS2008に必要な機能がないことを確認しようとしています。 お返事ありがとうございます! –

+0

Roflは今これを振り返りました(4年後)、私はあなたの答えを正しいものとしてマークするべきです。ごめんなさい。 –

関連する問題