模拟方法绘制到用于搜索null的接口

时间:2018-10-22 06:14:11

标签: java nullpointerexception boolean mockito

我有一种方法,我必须将其绘制到接口并编写用于搜索nullPointerExc的测试。方法如下:

boolean hasDocsChangedRequired (GroupProvider currentGroupAdm, GroupProvider groupAdm) { 
    return !currentGroupAdm.getDocs().equals(groupAdm.getDocs()); 
}

getDocs方法中的某处为空。

我使用方法创建了接口Changer

boolean hasDocsChangedRequired();

然后我将其实现为使用与之前使用SOLID规则相同的body方法进行分类

我有一个疑问,如何使用嘲笑者来更好地编写测试以完全覆盖此布尔函数?

2 个答案:

答案 0 :(得分:0)

方法的输出

boolean hasDocsChangedRequired (GroupProvider currentGroupAdm, GroupProvider groupAdm) { 
    return !currentGroupAdm.getDocs().equals(groupAdm.getDocs()); 
}

仅取决于您的两个输入对象。

换句话说:您只需要 提供输入对象,这些对象将提供您想要针对特定​​测试提供的内容。含义:您可能想编写一个测试,其中currentGroupAdm.getDocs()给出等于groupAdm.getDocs()的值,而其中两次调用给出不相等的结果。

理想情况下,您无需在此处嘲笑任何东西。

答案 1 :(得分:0)

@pawel,您可以像这样编写测试以检查您的功能,我假设该功能不是静态的。 如果要使其静态,则只需删除这两行

    #My alert
    [{"BillNo":"4353","BillDetails":"my bill","Amount":"455"},{"BillNo":"4353","BillDetails":"my bill","Amount":"455"},{"BillNo":"4353","BillDetails":"my bill","Amount":"455"},{"BillNo":"4353","BillDetails":"my bill","Amount":"455"},{"BillNo":"4353","BillDetails":"my bill","Amount":"45"},{"BillNo":"43","BillDetails":"my bill","Amount":"600"}]

    <script>
    $("#btnjson").click(function () {
    			var array1 = [];
    					$("tbody tr").each(function () {
    							
                        //var amount = $(this).find('td').eq(2).text().trim();
                        //if (!isNaN(amount) && parseFloat(amount) > 0) {
                            var firstTableData = {};
                            firstTableData.BillNo = $(this).find('td').eq(0).text().trim();
                            firstTableData.BillDetails = $(this).find('td').eq(1).text().trim();
                            firstTableData.Amount = $(this).find('td').eq(2).text().trim();
                            array1.push(firstTableData);
                        //}
                    });
    				{
    				jQuery.get( "/jsondata/", { data: array1 } );
    				 
        			alert(JSON.stringify(array1));
    				};

    				//e.preventDefault();
    			});
            });
    </script>
    Bill No: <input type="text" name="billno" id="billNo" autocomplete="off">
    			Amount: <input type="text" name="amount2" id="amnt" pattern="[0-9]+" title="please enter amount" autocomplete="off">
    			<br>
    			Bill Details: <input type="text" id="billDetails" name="billdetails" style="margin: 1px 0px 20px; width: 850px; height: 42px;" autocomplete="off">
    			<button type="button" id="btnAdd" class="button" value="Add">Add</button> <button type="button" id="btn2" class="button" value="Complete all entries">Complete All entries</button>
    			 <br><br>
    			<table name="txt" id="tempResult" align="center">
    			  <thead>
    			   <tr>
    				 <th>Bill No</th>
    				 <th>Bill Details</th>
    				 <th>Amount</th>
    				 <th>Action</th>
    			   </tr>
    			  </thead>
    			  <tbody>
    			  </tbody>
    			  <tfoot>
    				<tr>
    				  <td></td>
    				  <td></td>
    				  <td></td>
    				  <td>Total : <span id="total"></span></td>
    				</tr>
    			   </tfoot>
    			 </table>
    <input id="btnjson" type="submit" value="ok"  /><br />
#views.py

@csrf_exempt
def jsdata(request):
	b_details = request.POST['']
	data = json.loads(list(array1))
	for billno in data():
	 print(billno)

    #models

    class Mvouchar(models.Model):
    	related = models.ForeignKey(Signs, on_delete=models.CASCADE, null=True, blank=True)
    	bill_no = models.CharField(max_length=80, null=True, blank=True)
    	bill_details = models.CharField(max_length=1000, null=True, blank=True)
    	am = models.CharField(max_length=30, null=True, blank=True)

并且代替“ changer”,您调用了相应的Implemented类。 希望这会有所帮助。

@InjectMocks
ChangerImpl changer;