C ++ EXPECT_EQ& ASSERT内圈for

时间:2017-11-08 09:58:19

标签: c++ unit-testing googletest

我对C ++很新,这是我第一次使用googletest。我正在尝试实现一个模拟抑制性和兴奋性神经元网络的代码。每个神经元都接受10%人口的投入。延迟接收尖峰并存储在缓冲液中,因此当目标神经元更新其膜电位时,它可以轻松读取输入。现在,我想测试一下,当一个神经元出现尖峰时,它的输入会以正确的值写入正确的索引。首先,我想循环遍历群体中的每个神经元,然后对于每个神经元,我想循环遍历每个目标并检查每个神经元的缓冲区;所以在我的第二个循环结束时,我有我的EXPECT& ASSERT语句。一切似乎都很好,除了我感觉它不是测试所有目标和神经元,而只测试最后一个神经元及其最后一个目标(?)。实际上,当我在终端上运行测试时,它说:来自BufferTest的1个测试,运行正常。它应该是更多的测试吗?

以下是该测试的代码:

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; 

}

1 个答案:

答案 0 :(得分:0)

此:

TEST(BufferTest, write_read_resetBuffer) {
    ...
}

是来自一个测试用例write_read_resetBuffer一个测试BufferTest。  您在其中进行了多少EXPECT/ASSERT次呼叫并不重要。任何 EXPECT个失败将在单独中报告 这个测试的输出。测试中最多只能有一个ASSERT失败, 当然,因为任何ASSERT失败都会结束测试。

如果您希望每次EXPECT/ASSERT通话看到一个测试,那么您就拥有了 写更多TEST个,每个只包含一个EXPECT/ASSERT。您 可以把它们放在同一个测试用例中:

TEST(BufferTest, anotherTest) {
    ...
}

或在不同的测试案例中:

TEST(AnotherBufferTest, someTest) {
    ...
}

如你所愿。但是你所做的一切都没有错误。您的单项测试已通过。

相关问题