2017-11-08 19 views
0

私はC++をかなり新しくしています。これはgoogletestを初めて使用したときです。私は、抑制ニューロンと興奮ニューロンのネットワークをシミュレートするコードを実装しようとしています。すべてのニューロンは、人口の10%からインプットを受け取ります。スパイクは遅れて受信され、バッファに保存されるため、ターゲットニューロンが膜電位を更新すると、入力を容易に読み取ることができます。さて、私は、あるニューロンが急上昇したとき、その入力が正しい値で正しいインデックスに書き込まれることをテストしたいと思います。だから最初に私は人口のすべてのニューロンをループしたいと思います。そして、すべてのニューロンについて、それぞれのターゲットをループして、すべてのバッファをチェックしたいと思います。私の2番目のループの終わりに、私は自分のEXPECT & ASSERTステートメントを持っています。すべてのターゲットとニューロンだけでなく、最後のニューロンとその最後のターゲット(?)だけをテストしているということを除いて、すべてうまくいくようです。実際、私が端末でテストを実行すると、BufferTestから1テスト、OKを実行します。はるかに多くのテストをする必要がありますか?ここforループ内のC++ EXPECT_EQ&ASSERT

は、その試験のための私のコードである:

TEST(BufferTest、write_read_resetBuffer) {

Network* net = new Network({0, 20}, 0.1, 1.5, 0.1, 20, 80, 2, 5, "BufferTest.txt"); 
Neuron* source = new Neuron(0, 0.1,1.5, 0.1, 2, true, 5); 
Neuron* Ni = new Neuron(0, 0.1,1.5, 0.1, 2, 5, true); 

bool spiking = false; 
for(unsigned int j = 0; j < net->getPop(); ++j) 
{ 
     source = net->getPopulation_()[j]; 
     source->set_iext(2); 

     do{ 
      spiking = source->update_state_(); 
     }while(!spiking); 

     unsigned int index = (source->getspiketime() + 15)%16;  

     for(unsigned int i = 0; i < source->getMyTargets().size(); ++i) 
     { 
      int target_i = source->getMyTargets()[i];  

      Ni = net->getPopulation_()[target_i]; 
      Ni->set_step(source->getspiketime());    
      Ni->write_buffer(source->getweight()); 
      std::vector<double> temp = Ni->getBuffer(); 

      ASSERT_EQ(16, temp.size()); 
      ASSERT_LE(index, temp.size()); 

      Ni->set_step(15); 
      double value = Ni->read_buffer();    
      Ni->reset_buffer();      
      if(source->Is_it_excitatory()) 
      { EXPECT_EQ(0.1, value); }else{ EXPECT_EQ(-0.5, value); }; 
      EXPECT_EQ(0, Ni->read_buffer()); 
     } 
} 
    delete net; 
    net = nullptr; 

}

答えて

0

これ:

TEST(BufferTest, write_read_resetBuffer) { 
    ... 
} 

は試験であります、write_read_resetBuffer、一つのテストケースから、BufferTestEXPECT/ASSERTがあなたの中にどれだけあなたに電話するかは関係ありません。いずれも EXPECTの失敗は、このテストの 出力で報告された個々にと報告されます。多くの場合、ASSERTのテストでエラーが発生する可能性があります。 は、いずれもASSERTに失敗したためテストが終了します。

あなたはEXPECT/ASSERTコールごとに一つのテストを見たいなら、あなたはより多くのTEST秒、一つだけEXPECT/ASSERTを含む各を書くこと を持っています。あなたが合うよう

TEST(AnotherBufferTest, someTest) { 
    ... 
} 

TEST(BufferTest, anotherTest) { 
    ... 
} 

または異なるテストケースで:あなた は、同じテストケースでそれらを置くことができます。しかし、が間違ったと何もしていません。あなたの単一のテストは合格しました。