質問

I am not able to upload my package because test coverage is below 75%. How to improve coverage. How to write test methods for triggers. Please help.

I have tried this code : This is my controller class:

    public class MyController{
         public List<Merchandise__c> merch{get;set;}
         public Merchandise__c toDelete{get;set;}


         public MyController(){


 merch = [SELECT ID,Merchandise__c.name,Price__c,Description__c,Total_Inventory__c FROM Merchandise__c];
    }

    public pageReference del(){
        string id = Apexpages.currentpage().getParameters().get('merchandiseId');
        toDelete = [SELECT Id,Merchandise__c.name,Price__c,Description__c,Total_Inventory__c FROM Merchandise__c WHERE Id =: id];     
        delete toDelete;
        return null;
    }

     public pageReference add(){
       Merchandise__c  item = new Merchandise__c(
           Name = 'Enter Name',
           Description__c = 'Enter Description',
           Price__c = 0.00,
           Total_Inventory__c = 0
       );
        merch.add(item);
        insert item;
        return null;
    }

    public PageReference save(){   
        string id = Apexpages.currentpage().getParameters().get('merchandiseId');        
        Merchandise__c toUpdate = [SELECT Name, Description__c, Price__c FROM Merchandise__c WHERE ID =: id];          
        update toUpdate;  
        return null;
      }

}

I have craeted this Test Class :

 @isTest

Public Class demoTest{
     static testMethod void checkDatatableData() {         
          List<Merchandise__c> merch;

          Test.startTest();
          merch = [SELECT ID,Merchandise__c.name,Price__c,Description__c,Total_Inventory__c FROM Merchandise__c];
          Test.stopTest();
   }


    static testMethod void checkAdd() {

           Merchandise__c  item = new Merchandise__c(
           Name = 'Enter Name',
           Description__c = 'Enter Description',
           Price__c = 0.00,
           Total_Inventory__c = 0
        );

            Test.startTest(); 
            insert item;
            System.assertNotEquals(null,item.Id);
            List<Merchandise__c> merchItem = [SELECT Id FROM Merchandise__c WHERE Id =: item.Id];
            System.assertEquals(1,merchItem.size());
            Test.stopTest();
      }   


      static testMethod void checkUpdateDelete() { 

               Merchandise__c  testmerch = new Merchandise__c(
               Name = 'NewProduct',
               Description__c = 'this is anew product',
               Price__c = 20.00,
               Total_Inventory__c = 100
               );

              Test.startTest(); 
              insert testmerch;
              system.assertNotEquals(null,testmerch.Id);
              testmerch.Price__c = 40.00;
              update testmerch;

              Merchandise__c updatedmerch = [SELECT Id,Price__c FROM Merchandise__c WHERE Id =: testmerch.Id];          
              system.assertEquals(40.00,updatedmerch.Price__c);

              Merchandise__c  toDelete = [SELECT ID FROM Merchandise__c WHERE Id =: testmerch.Id];
              system.assertNotEquals(null,toDelete.Id);
              delete toDelete;
              Test.stopTest(); 
         }    

  }

Can you please tell me what changes I need to do to improve coverage?

役に立ちましたか?

解決

This link should tell you what you need to know.

http://wiki.developerforce.com/page/An_Introduction_to_Apex_Code_Test_Methods

Basically you need to replicate the functionality of the trigger in your test methods, so for instance if you have an after update trigger case that runs when it moves from Open to Closed you first need to create a test method for your trigger then within the test method insert a case record for testing, which may also require a contact or an account etc, then you change the value of the case to closed and then run an update method. This is very simplistic but that is the idea. So when writing test classes try to think about what your triggers and classes do and then try to automate what the user would do in your test methods, making sure to cover all your bases including where the piece of apex should fire an exception.

Try to avoid using hard-coded Id's wherever possible.

These links may also help

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_testing_best_practices.htm http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_qs_test.htm

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top