Pex does not support decimal

So not able to do much this weekend I decided to use Pex to do some testing on a project I am busy on.  The class I needed to test was a quote detail line where there is two quantities, of which only one can be specified depending on the property DealerSupplied.  Here is the bare properties:

   1: public decimal DealerQty


   2: {


   3:     get


   4:     {


   5:         return _DealerQty;


   6:     }


   7:     set


   8:     {


   9:         if (!DealerSupplied && value != 0)


  10:         {


  11:             throw new ArgumentException("You cannot set the DealerQty if the product is not DealerSupplied.");


  12:         }


  13:  


  14:         SetPropertyValue("DealerQty", ref _DealerQty, value);


  15:     }


  16: }


  17:  


  18: public bool DealerSupplied


  19: {


  20:     get


  21:     {


  22:         return _DealerSupplied;


  23:     }


  24:     set


  25:     {


  26:         SetPropertyValue("DealerSupplied", ref _DealerSupplied, value);


  27:         if (_DealerSupplied)


  28:         {


  29:             WMSQty = 0;


  30:         }


  31:         else


  32:         {


  33:             DealerQty = 0;


  34:         }


  35:     }


  36: }


  37:  


  38: public decimal WMSQty


  39: {


  40:     get


  41:     {


  42:         return _WMSQty;


  43:     }


  44:     set


  45:     {


  46:         if (DealerSupplied && value != 0)


  47:         {


  48:             throw new ArgumentException("You cannot set the WMSQty if the product is DealerSupplied.");


  49:         }


  50:         SetPropertyValue("WMSQty", ref _WMSQty, value);


  51:     }


  52: }




Initially I was guessing that I’d need at least 6 or 7 tests to test these three properties.



So how can Pex help me explore this code?



Well I thought I’d try the following code:















   1: [PexMethod]


   2: public void DealerSupplied_Qty_Test_Dec(bool dealerSupplied, decimal wmsQty, decimal dealerQty)


   3: {


   4:     StubQuoteComponentBase target = new StubQuoteComponentBase();


   5:     target.DealerSupplied = dealerSupplied;


   6:     target.WMSQty = wmsQty;


   7:     target.DealerQty = dealerQty;


   8: }




I was a bit surprised when I got only two tests back from Pex.  I was even more surprised when I saw the values.



image





So my first reaction was to shoot of an email to Pex Support.  I then tried to use int’s instead of decimal’s.





   1: [PexMethod]


   2: public void DealerSupplied_Qty_Test_Int(bool dealerSupplied, int wmsQty, int dealerQty)


   3: {


   4:     StubQuoteComponentBase target = new StubQuoteComponentBase();


   5:     target.DealerSupplied = dealerSupplied;


   6:     target.WMSQty = wmsQty;


   7:     target.DealerQty = dealerQty;


   8: }




This gave me a much better result:



image



Then I got an email from Nikolai, where he confirmed that Pex does not play well with the decimal value type.  In his words: ‘all generated tests are bogus’ when using decimal as parameters.

Post a Comment