2012-04-21 17 views
2
//Page 40: Unit Test for Player class 
//Player must have a health that is greater than 0 
//When the character is created. 

namespace UnitTestingSample 
{ 

    class PlayerTests 
    { 
     public bool TestPlayerIsAliveWhenBorn() 
     { 
      Player p = new Player(); //ERROR: 'UnitTestingSample.Player.Player()' is inaccessible due to its protection level 

      if (p.Health > 0) 
      { 
       return true; //pass test 
      } 

      return false; //fail test 

     }//end function 

    }//end class 

}//end namespace 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

//Page 41 
//Player class has default health which is 10 
//when his character is created 
namespace UnitTestingSample 
{ 

    class Player 
    { 
     public int Health { get; set; } 

     Player() //constructor 
     { 
      Health = 10; 
     } 
    } 
} 

===============C#の:参照してください保護レベルのエラー

、これは私が悲しい作るものです。

このコードは、「C#Game Programming:Serious Game Creation」という名前のブックからのコードです。

私はこの本のCD-ROMからまったく同じコードを得ました。私のエラーがある間、そのサンプルコードは問題ありません。

これは私の初めてのC#を使用してゲームコーディングを書くことです。しかし、私が理解したように、私の仕事はすべきです。しかし、コンパイラはそうは思わないようです。

どうすればこの問題を解決できますか?

答えて

2
class Player 
{ 
    public int Health { get; set; } 

    public Player() //constructor 
    { 
     Health = 10; 
    } 
} 

クラスメンバーはデフォルトではプライベートなので、コンストラクタもテストコードではアクセスできません。クラス自体以外の場所からアクセスする場合は、コンストラクタをpublicにします。

+0

ありがとうございました!だから、Playerクラスはプライベートではないので、コンストラクターは必ずプライベートではないと思った。 –

+0

この場合、特に明記していない限り、クラスはプライベートです。つまり、 'public class Player' – mynameiscoffey

+0

@mynameiscoffeyネストされていないタイプ、すなわち' namespace'の直接メンバーであるタイプのデフォルトの保護レベルは、 C#の用語では「内部」と呼ばれます。同じ「プログラム」、すなわち同じアセンブリからのみアクセスすることができる。 –

3

私は同様の問題を抱えていたし、このブログの記事を見つけたが、それは示唆して具体的な解決策は、あなたがAssemblyInfo.csが

[assembly: InternalsVisibleTo("TestProject")] 
を提出テストするプロジェクトに次の行を追加することです http://softwareonastring.com/316/why-cant-my-test-access-a-public-constructor

非常に有用でした

(TestProjectはテストプロジェクトアセンブリの名前に変更されます)

ユニットテストプロジェクトの参照を右クリックし、プロジェクトへの参照を追加するy ouはテスト中です。

これは、2つのプロジェクトを緊密に結合し、正常なオブジェクト指向のベストプラクティスに対して機能するため、単体テストにのみ推奨されます。

関連する問題