<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Hi,<br><br>I have tried to become familiar with QSignalSpy. For instance, to comply with "After adding a price 'valueChanged()' should be emitted.", I have implemented this:<br><br><blockquote>


        
        
        
        


<p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none">
<font color="#000000"> 
<font size="3">qRegisterMetaType<MyMoneyAccount>("MyMoneyAccount");
</font></font></p>
<p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none">
<font style="" color="#000000">  <font style="font-size: 12pt;" size="3">QSignalSpy spy(m,
SIGNAL(<b>valueChanged</b>(MyMoneyAccount))); <br></font></font></p><p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none"><font color="#000000"><font style="font-size: 12pt;" size="3"><br></font></font></p>
<p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none">
<font color="#000000">  <font size="3">m->addPrice(price);
</font></font></p>
<p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none">
<font style="" color="#000000">  <font style="font-size: 12pt;" size="3">ft.commit(); <br></font></font></p><p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none"><font color="#000000"><font size="3"><br></font></font></p>
<p style="margin-bottom: 0cm; font-weight: normal; text-decoration: none">
<font color="#000000">  <font size="3">QCOMPARE(spy.count(), 1);
</font></font></p></blockquote><style type="text/css">P { margin-bottom: 0.21cm; }</style>

<br>However, I <span class="b4">d</span><span class="b5">o not f</span><span class="b4">ully </span><span class="b5">understand</span><span class="b4"> </span>what this mechanism contributes in this case as far as the test file already checks that situation just after adding a price:<br>  <br><blockquote>  QVERIFY(m_balanceChanged.count() == 0);<br>  QVERIFY(m_valueChanged.count() == 1);<br>  QVERIFY(m_valueChanged.count("A000002") == 1);<br></blockquote><br>Thus, I think that what I need is a scenario where a change in the "count" of some of those signals arise after inserting the fault/s that I commented. This is not happening at the moment with the current mymoneytestfile.cpp. <br><br>Regards.<br><br> <br><br><div>> Date: Tue, 17 Feb 2015 20:18:23 +0200<br>> Subject: Re: [Kmymoney-devel] Improving the test suite for MyMoneyFile<br>> From: onet.cristian@gmail.com<br>> To: pedretti_86@hotmail.com<br>> CC: kmymoney-devel@kde.org<br>> <br>> To verify signal emission in a test case use QSignalSpy [1] (it's<br>> pretty well documented).<br>> <br>> I'm on the run now but I'll follow up with a specific example and<br>> ideas about the balance cache later.<br>> <br>> Regards,<br>> Cristian<br>> <br>> [1] http://doc.qt.io/qt-5/QSignalSpy.html<br>> <br>> 2015-02-17 19:24 GMT+02:00 victor <pedretti_86@hotmail.com>:<br>> > Thanks for your answer Cristian. I understand what you mean, but I have no<br>> > idea about how to check that those signals are emitted since I have never<br>> > worked with this mechanism. Could you please show me a specific example?<br>> ><br>> > Your answer refers to m_valueChangedSet and m_balanceChangedSet. Any ideas<br>> > about the faults involving "m_balanceCache"?<br>> ><br>> >> Date: Tue, 17 Feb 2015 16:23:42 +0200<br>> >> Subject: Re: [Kmymoney-devel] Improving the test suite for MyMoneyFile<br>> >> From: onet.cristian@gmail.com<br>> >> To: pedretti_86@hotmail.com<br>> >> CC: kmymoney-devel@kde.org<br>> ><br>> >><br>> >> Hi,<br>> >><br>> >> Since those two members are used to implement the emit of the<br>> >> 'balanceChanged()' and 'valueChanged()' signals after committing<br>> >> changes you could write a test case that asserts that those signals<br>> >> are emitted properly.<br>> >><br>> >> For example:<br>> >> After adding a transaction 'balanceChanged()' should be emitted.<br>> >> After adding a price 'valueChanged()' should be emitted.<br>> >><br>> >> Regards,<br>> >> Cristian<br>> >><br>> >> 2015-02-17 16:13 GMT+02:00 victor <pedretti_86@hotmail.com>:<br>> >> > Hello,<br>> >> ><br>> >> > I am trying to improve some of the test files of KMyMoney for my<br>> >> > research<br>> >> > studies. This is a really complex task when you are not involved in<br>> >> > programming this application, so I need your help to achieve it.<br>> >> ><br>> >> > All the same, I'm only focusing on some specific parts. What I'm doing<br>> >> > is to<br>> >> > introduce several concrete faults into the code and then observe if the<br>> >> > fault is detected by the test suite (this would be the expected of an<br>> >> > adequate test suite, but we all now that this is quite difficult<br>> >> > sometimes).<br>> >> > In this sense, I have been doing this in "mymoneyfile.cpp" and testing<br>> >> > it<br>> >> > with its corresponding file test "mymoneyfiletest.cpp". The faults<br>> >> > introduced are faults which are common when programming because we<br>> >> > sometimes<br>> >> > mix the name of variables of the same type, or do not call the<br>> >> > appropriate<br>> >> > method because of "copy and paste",...<br>> >> ><br>> >> > Here I show two of these faults that the test suite is not able to<br>> >> > detect<br>> >> > (the result is the same in the original program and with the inserted<br>> >> > fault):<br>> >> ><br>> >> > 1) The first is in the method "void<br>> >> > MyMoneyFile::commitTransaction(void)",<br>> >> > where I change:<br>> >> ><br>> >> > d->m_balanceChangedSet.remove((*it).id());<br>> >> ><br>> >> > by:<br>> >> ><br>> >> > d->m_valueChangedSet.remove((*it).id());<br>> >> ><br>> >> > Exactly the same happens in the method "void<br>> >> > MyMoneyFile::rollbackTransaction(void)" if, for instance, I change<br>> >> > "d->m_valueChangedSet.clear();" by "d->m_balanceChangedSet.clear();".<br>> >> > These<br>> >> > changes seem to be meaningful changes, but they are not detected by the<br>> >> > test<br>> >> > suite at the moment.<br>> >> ><br>> >> > 2) The other situation that I want to report is in method "void<br>> >> > notify(void)" belonging to "MyMoneyFile::Private". If I change,<br>> >> ><br>> >> > m_balanceCache.clear(i.first, i.second);<br>> >> ><br>> >> > by:<br>> >> ><br>> >> > m_balanceCache.clear(i.first);<br>> >> ><br>> >> > or:<br>> >> ><br>> >> > m_balanceCache.clear();<br>> >> ><br>> >> > How could I detect that I are not calling the method "clear" in a<br>> >> > correct<br>> >> > way?<br>> >> ><br>> >> > I am aware that this is quite specific and may be difficult to create<br>> >> > test<br>> >> > cases for these situations, but I think that this is a very good chance<br>> >> > to<br>> >> > improve the test suite of MyMoneyFile (a very important module in the<br>> >> > application).<br>> >> ><br>> >> > Does somebody know how to reveal the aforementioned faults modifying<br>> >> > existing test cases or designing a new one?<br>> >> ><br>> >> > Thanks in advance.<br>> >> ><br>> >> > _______________________________________________<br>> >> > KMyMoney-devel mailing list<br>> >> > KMyMoney-devel@kde.org<br>> >> > https://mail.kde.org/mailman/listinfo/kmymoney-devel<br>> >> ><br></div>                                      </div></body>
</html>