我对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;
}
答案 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) {
...
}
如你所愿。但是你所做的一切都没有错误。您的单项测试已通过。