我目前获得了 58% 的代码覆盖率,我需要它达到 75% 才能部署到生产环境。
下面是我的 Apex 测试课程,最底部是我的 Apex 课程。
@isTest(SeeAllData=true)
public class VaultVFTEST {
/*This is a test class for the class VaultVF which is a Visusalforce controller for
the page vault */
static testMethod void VaultVFTEST() {
//Create opp, hardcode the Deal_Registration_Id__c field with 'x111111111' and insert opp
//Opportunity opp = new Opportunity(Name='test opp', StageName='stage', Probability = 95, CloseDate=system.today());
//insert opp;
//Create a vault record that will be submitted
Vault__c vlt = new Vault__c(
Scenario__c = 'BIG-IP front ending Firewalls',
isValidDealReg__c = true,
Status__c = 'Application Received',
Load_Balancer_is_a_Firewall__c = 'Yes',
Providing_DDos_Connection__c = 'Firewalls',
Providing_DDos_protection_except_ASM__c = 'Yes',
No_Traffic_Traverse__c = 'Yes',
Firewall_Vendor_Name__c = 'Firewall Vendor Company',
First_Name__c = 'Test First Name',
Last_Name__c = 'Test Last Name',
Company_Name__c = 'Test Company Name',
Phone__c = '(206) 946-3126',
//Email__c = 'test@email.com',
Country__c = 'United States',
Additional_Info__c = 'Test Additional Info'
//Related_Opp__c = opp.Id
);
//Setup page for standard controller
ApexPages.StandardController sc = new ApexPages.StandardController(vlt);
Test.startTest();
VaultVF controller = new VaultVF(sc);
Test.stopTest();
//Assert has errors method returns true
system.assert(controller.getHasErrors() == false);
//Build the captcha value
controller.getChar1();
controller.getChar2();
controller.getChar3();
controller.getChar4();
controller.getChar5();
controller.getChar6();
//Set captcha input value
controller.captchaInput = '';
//Attempted to submit form
controller.save();
//Assert terms checkbox was not selected
system.assert(controller.errorMsgs[0].startsWith('You must'));
//Assert verification code was incorrect
system.assert(controller.errorMsgs[1].startsWith('Verification code'));
//'Check' the box, set captcha value and then save
controller.scenario1 = true;
controller.captchaInput = controller.correctAnswer();
controller.save();
}
}
下面是我的 Apex 课程
public with sharing class VaultVF {
public Vault__c vault {get; set;}
public List<String> errorMsgs {get; set;}
public String saveResult {get; set;}
public String dealReg {get; set;}
public String oppId {get; set;}
public String email {get; set;}
public Boolean scenario1{get; set;}
public Boolean scenario2{get; set;}
public Boolean scenario3{get; set;}
// Generates country dropdown from country settings
public List<SelectOption> getCountriesSelectList() {
List<SelectOption> options = new List<SelectOption>();
options.add(new SelectOption('', '-- Select One --'));
// Find all the countries in the custom setting
Map<String, Country__c> countries = Country__c.getAll();
// Sort them by name
List<String> countryNames = new List<String>();
countryNames.addAll(countries.keySet());
countryNames.sort();
// Create the Select Options.
for (String countryName : countryNames) {
Country__c country = countries.get(countryName);
options.add(new SelectOption(country.Two_Letter_Code__c, country.Name));
}
return options;
}
//Constructor, set defaults
public VaultVF(ApexPages.StandardController controller) {
vault = (vault__c)controller.getRecord();
//Populate list of random characters for CAPTCHA verification
characters = new List<String>{'a','b','c','d','e','f','g','h',
'i','j','k','m','n','p','q','r','s','t','u','v','w',
'x','y','z','1','2','3','4','5','6','7','8','9'
};
errorMsgs = new List<String>();
}
//Determine if page has error so errors message can be displayed
public boolean getHasErrors(){
if(ApexPages.hasMessages() == true){
if(errorMsgs == null){
errorMsgs = new List<String>();
}
//Loop through errors and add to a list
for(ApexPages.Message m : ApexPages.getMessages()){
if(m.getSummary().startsWith('Uh oh.')){
errorMsgs.add(String.valueOf(m.getSummary()));
}
}
}
return ApexPages.hasMessages();
}
public void save(){
errorMsgs = new List<String>();
//Make sure captcha was correct
if(validateCAPTCHA() == false){
errorMsgs.add('Verification code was incorrect.');
captchaInput = '';
}
//Make sure the Scenario is selected
if(scenario1 == true){
vault.Scenario__c = 'BIG-IP as a Firewall';
}else if(scenario2 == true){
vault.Scenario__c = 'BIG-IP providing firewall service in conjunction with other vendors';
}else if(scenario3 == true){
vault.Scenario__c = 'BIG-IP front ending Firewalls';
if(vault.Load_Balancer_is_a_Firewall__c == null){
errorMsgs.add('Please specify if the load balancer is a firewall.');
}
if(vault.Providing_DDos_Connection__c == null){
errorMsgs.add('Please specify if this is providing DDos connection level protection for firewalls or both.');
}
if(vault.Providing_DDos_protection_except_ASM__c == null){
errorMsgs.add('Please specify if we are providing DDos protection (except ASM).');
}
if(vault.No_Traffic_Traverse__c == null){
errorMsgs.add('Please specify if there is Traffic that does not traverse the Firewalls.');
}
if(vault.Firewall_Vendor_Name__c == null){
errorMsgs.add('Please specify a Firewall Vendor.');
}
} else {
errorMsgs.add('Please select one of three Scenarios that is similar to your setup');
}
//-----Need to make sure deal registration number on opportuntiy is valid.-----
//Set some sort of is valid deal reg flag to false. We will assume the deal reg Id entered is invalid until we determine it is valid
vault.isValidDealReg__c = false;
//Query Account Id, and Deal_Registration_Id__c from the opportunity object where the deal registration Id equals the value entered in the form
List<Opportunity> opps = [select Id, Deal_Registration_ID__c from Opportunity where Deal_Registration_ID__c = :vault.Deal_Registration__c];
//check to see if registration id on the opp match the entered value
if(opps.size() > 0 && opps[0].Deal_Registration_ID__c == vault.Deal_Registration__c){
//If they do match set the valid deal reg Id flat to true
vault.isValidDealReg__c = true;
vault.Related_Opp__c = opps[0].Id;
//If they don't match then query all contacts on the account related to the opportunity
}
//If is valid deal reg flag is false add a message to the errorMSgs list indicated the entered
//deal registration is not valid with details on who they should contact
if(errorMsgs.size()>0){
//stop here
} else if(vault.isValidDealReg__c == false){
errorMsgs.add('Deal Registration # was incorrect. Please contact your representative.');
} else {
try{
vault.Status__c = 'Application Received';
insert vault;
saveResult = 'success';
}catch(exception e){
ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.FATAL, 'Uh oh. Something didn\'t work quite right. Please contact partners@f5.com for assistance. \n\n' + e.getMessage()));
saveResult = 'fail';
}
}
}
//------------------------Code for CAPTCHA verification----------------------------
public String captchaInput {get; set;}
List<String> characters;
String char1;
String char3;
String char5;
//This methods simply returns a random number between 0 and the size of the character list
public Integer randomNumber(){
Integer random = Math.Round(Math.Random() * characters.Size());
if(random == characters.size()){
random--;
}
return random;
}
/*Here we have 6 get methods that return 6 random characters to the page.
For chars 1,3, and 5 (the black characters) we are saving the the values so
that we can compare them with the user's input */
public String getChar1(){
char1 = characters[randomNumber()];
return char1;
}
public String getChar2(){
return characters[randomNumber()];
}
public String getChar3(){
char3 = characters[randomNumber()];
return char3;
}
public String getChar4(){
return characters[randomNumber()];
}
public String getChar5(){
char5 = characters[randomNumber()];
return char5;
}
public String getChar6(){
return characters[randomNumber()];
}
public String correctAnswer(){
return char1 + char3 + char5;
}
public Boolean validateCAPTCHA(){
if(captchaInput.length() == 3 && captchaInput.subString(0,1) == char1 && captchaInput.subString(1,2) == char3 && captchaInput.subString(2,3) == char5){
return true;
}else{
return false;
}
}
}