您好我试图获得一个很少有未来方法(用于Web服务调用)和几个具体静态方法的类的覆盖。但在调用未来方法后,我无法调用其他方法...请告诉我如何覆盖未来的方法和Web服务调用。
我的班级结构:
public with sharing class AccountSynchController {
@future (callout=true)
public static void importAccount(Set<Id> ids) {
}
@future (callout=true)
public static void importContact(Set<Id> ids) {
}
}
[future methods are called from trigger]
Test Class Code :
VAT__c testVat = new VAT__c();
testVat.Code__c = '3';
insert testVat;
Account testAccount = new Account();
testAccount.Name = 'Test Account';
testAccount.VATSales__c = testVat.Id;
testAccount.VATPurchase__c = testVat.Id;
testAccount.KvK_Nummer__c = '12312312';
testAccount.PhoneExt__c = '12312312';
testAccount.Website = '12312312';
testAccount.BillingPostalCode = '12312312';
testAccount.BillingCity = '12312312';
testAccount.Fax = '12312312';
testAccount.Phone = '12312312';
testAccount.BillingStreet = '12312312';
testAccount.BTW_Nummer__c = '12312312';
testAccount.BillingCountry = '12312312';
testAccount.BillingState = '12312312';
testAccount.BTW_Nummer__c = '12312312';
testAccount.E_mail__c = 'test@gmail.com';
testAccount.Taal__c = 'NL';
testAccount.SalesPaymentConditionCode__c = '15';
testAccount.Code__c = '102';
testAccount.fromExact__c = false;
testAccount.Exact_Id__c = '123123';
insert testAccount;
Contact testContact = new Contact();
testContact.AccountId = testAccount.Id;
testContact.Birthdate = system.today();
testContact.Conact_Exact_Number__c = '12312312312';
testContact.Email = 'test@gmail.com';
testContact.FirstName = 'first';
testContact.Title_Code__c = 'Mr.';
testContact.Geslacht__c = 'M';
testContact.Initials__c = 'I';
testContact.Language_Code__c = 'NL';
testContact.LastName = 'last';
testContact.MiddleName__c = 'middle';
testContact.Phone = '12321312312';
testContact.fromExact__c = false;
insert testContact;
谢谢..
答案 0 :(得分:4)
通过调用Test.startTest()开始单元测试,然后运行测试插入。完成致电Test.stopTest()。调用最后一个方法可确保您的@future方法被触发。之后,您可以执行断言来验证触发器的操作。
答案 1 :(得分:1)
扩展Adam的测试标注的答案,您需要使用Test.isRunningTest()
方法让您有机会模拟从您的网络服务返回数据 - 这不是最好的,但它是普遍接受的方式。
另一种选择是使用一些模拟和注射,但这并不像它应该那么直接,所以大多数人都会选择第一种选择。
答案 2 :(得分:0)
由于无法直接从测试类中调用Web服务,因此您必须编写一个成瘾模拟类。其目的是产生一个虚假的回应。
// This causes a fake response to be generated
Test.setMock(WebServiceMock.class, new WebServiceMockImpl());
其中WebServiceMock.class是上面提到的类。 之后,您可以在测试类中调用真正的Web服务调用方法。
请查看以下链接以获取更多信息。
http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_callouts_wsdl2apex_testing.htm