C++ EXPECT_EQ & ASSERT inside for loop
C++ EXPECT_EQ & ASSERT inside for loop
我是 C++ 的新手,这是我第一次使用 googletest。我正在尝试实现一个可以模拟抑制性和兴奋性神经元网络的代码。每个神经元接收来自 10% 人口的输入。尖峰被延迟接收并存储在缓冲区中,因此当目标神经元更新其膜电位时,它可以轻松读取输入。现在,我想测试一下,当一个神经元发出尖峰信号时,它的输入会以正确的值写入正确的索引处。所以首先我想遍历群体中的每个神经元,然后对于每个神经元我想遍历它的每个目标并检查每个目标的缓冲区;所以在我的第二个循环结束时,我有我的 EXPECT & ASSERT 语句。一切似乎都很好,除了我有一种感觉,它不是在测试所有目标和神经元,而是只测试最后一个神经元和它的最后一个目标(?)。事实上,当我 运行 在我的终端上进行测试时,它说:1 个来自 BufferTest 的测试,运行 OK。应该进行更多的测试,不是吗?
这是我的测试代码:
测试(缓冲区测试,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;
}
这个:
TEST(BufferTest, write_read_resetBuffer) {
...
}
是一个测试,write_read_resetBuffer
,来自一个测试用例,BufferTest
。
您在其中进行了多少次 EXPECT/ASSERT
调用并不重要。任何
EXPECT
失败将单独 报告在
这个测试的输出。测试中最多可以有一个 ASSERT
失败,
当然,因为任何 ASSERT
失败都会结束测试。
如果您想在每个 EXPECT/ASSERT
电话中看到一个测试,那么您有
写更多 TEST
s,每个只包含一个 EXPECT/ASSERT
。你
可以将它们放在同一个测试用例中:
TEST(BufferTest, anotherTest) {
...
}
或者在不同的测试用例中:
TEST(AnotherBufferTest, someTest) {
...
}
如您所愿。但是你所做的没有错。您的单个测试已通过。
我是 C++ 的新手,这是我第一次使用 googletest。我正在尝试实现一个可以模拟抑制性和兴奋性神经元网络的代码。每个神经元接收来自 10% 人口的输入。尖峰被延迟接收并存储在缓冲区中,因此当目标神经元更新其膜电位时,它可以轻松读取输入。现在,我想测试一下,当一个神经元发出尖峰信号时,它的输入会以正确的值写入正确的索引处。所以首先我想遍历群体中的每个神经元,然后对于每个神经元我想遍历它的每个目标并检查每个目标的缓冲区;所以在我的第二个循环结束时,我有我的 EXPECT & ASSERT 语句。一切似乎都很好,除了我有一种感觉,它不是在测试所有目标和神经元,而是只测试最后一个神经元和它的最后一个目标(?)。事实上,当我 运行 在我的终端上进行测试时,它说:1 个来自 BufferTest 的测试,运行 OK。应该进行更多的测试,不是吗?
这是我的测试代码:
测试(缓冲区测试,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;
}
这个:
TEST(BufferTest, write_read_resetBuffer) {
...
}
是一个测试,write_read_resetBuffer
,来自一个测试用例,BufferTest
。
您在其中进行了多少次 EXPECT/ASSERT
调用并不重要。任何
EXPECT
失败将单独 报告在
这个测试的输出。测试中最多可以有一个 ASSERT
失败,
当然,因为任何 ASSERT
失败都会结束测试。
如果您想在每个 EXPECT/ASSERT
电话中看到一个测试,那么您有
写更多 TEST
s,每个只包含一个 EXPECT/ASSERT
。你
可以将它们放在同一个测试用例中:
TEST(BufferTest, anotherTest) {
...
}
或者在不同的测试用例中:
TEST(AnotherBufferTest, someTest) {
...
}
如您所愿。但是你所做的没有错。您的单个测试已通过。