0

MSTest を使用して C# (Visual Studio 2012) で TDD を実行しています。[TestClass]属性で宣言されたクラスがあります。私のテスト クラスは、テストしようとしているクラスを継承しています。

親クラスにはパラメーターなしのコンストラクターがありますが、ビルド エラーが発生します

'RatingsClass.OutputLine' does not contain a constructor that takes 0 arguments

パラメーターなしのコンストラクターを使用した基本クラスは次のとおりです。

namespace RatingsClasses
{
    public class OutputLine
    {
        public OutputLine()
        {
            Initialise("Parameterless constructor called");
        }
(and so on)

これは、基本クラスから継承したテスト クラスです。これにより、次のビルド エラーが発生します。

'RatingsClass.OutputLine' does not contain a constructor that takes 0 arguments

コード:

using RatingsClasses;

namespace RatingsKataV2
{
    [TestClass]
    public class RatingsTests: OutputLine
    {
        [TestMethod]
        public void TestSingleTripRatingIs20()
        {
(and so on)

また、基本クラスのパラメーターなしのコンストラクターを派生クラスのコンストラクターから直接呼び出そうとすると、多くの赤い波線と や などの構文エラーが発生しConstructor must have bodyますUnexpected token

ベースコンストラクターを明示的に呼び出す私の試みは次のとおりです。

using RatingsClasses;

namespace RatingsKataV2
{
    [TestClass]
    public class RatingsTests: OutputLine
    {
        public RatingsTests(): OutputLine()
        {

        }
(the rest of the class goes here)

私は何を間違っていますか?

このようにする理由は、基本クラスのさまざまなプライベート メンバーが正しく設定されていることをテストしたいからです。getter と setter を提供したり、それらのメンバーを public にしたりするのではなく、テスト クラスがテスト対象のクラスから継承するだけで、それらの private メンバーに直接アクセスできるようにするのが理にかなっているように思えました。これを行うより良い方法はありますか?

4

3 に答える 3

2

基本コンストラクターを呼び出すための構文が間違っています。base次のキーワードを使用する必要があります。

public RatingsTest()
    : base()
{

}
于 2013-01-15T14:28:02.763 に答える
0

TestClass属性は、単体テストを含むクラス用であり、それらのテストのターゲットであるクラス用ではありません。テスト対象のターゲットから派生することにより、そのターゲットをRatingsTestsにも拡張します。

RatingsTestsは、テストするためにOutputLineから継承する必要はありませんが、コンストラクターは読み取る必要があります。

public RatingsTests(): base() {}
于 2013-01-15T14:26:58.247 に答える
0

使用baseする基本クラスのコンストラクターを明示的に選択するために使用します。

public RatingsTests() : base()
{
}

ただし、これを省略した場合は、パラメーターなしのコンストラクターがデフォルトで使用されるため、これは不要です。

最初に示したコードは機能するはずなので、実際のコードが異なるOutputLineか、コード ベースのどこかに 2 番目のクラスが呼び出されていると思います。

正しいOutputLineクラスを使用していること、およびこのクラスに実際にpublicパラメーターなしのコンストラクターがあることを確認してください。が欠落している場合publicは自動的privateに使用され、派生クラスでは使用できません。

于 2013-01-15T14:29:32.360 に答える