I created a project in Force IDE using Prod credentials. Then I created an Apex Class(Class A) in IDE. The Apex Class compiles fine, but can't be copied onto the server, due to code coverage issues. So I then created another Apex Class(Class B) to test Class A. What's weird is that the IDE is trying to compile Class B on the server and not locally. This would obviously fail because Class A is not on the server yet.
Now I created a Sandbox for Development purpose. Here Class A and Class B compile fine, but can't be deployed onto the server, again because of the code coverage. In Class B(Test Class) I have created a object of Class A and called all the methods of it. Even then it complains Class A is 0% covered.
I think there is an issue with the way I have implemented the Test class.
Pls help.
Error: IncomeExt(ApexClass) -- 13 lines not tested, 0% covered.
Class A:
public class IncomeExt { public Income__c q {get;set;} public IncomeExt (ApexPages.StandardController c) { controller = c; q = (Income__c) c.getRecord(); }
public void save() {}
public String attachIncome() { PageReference pdfPage = Page.AD672PDF; pdfPage.getParameters().put('id',q.id); Blob pdfBlob = pdfPage.getContent(); Attachment a = new Attachment(parentId = q.id, name=q.id + '.pdf', body = pdfBlob); insert a; return('test'); }
private ApexPages.StandardController controller;
}
Class B: (tester class)
@IsTest private with sharing class IncomeExtTest { static testMethod void myPage_Test() { //PageReference pageRef = Page.AD672; //Test.setCurrentPageReference(pageRef); ApexPages.StandardController con = new ApexPages.StandardController(new Income__c()); // create an instance of the controller //test.startTest(); IncomeExt temp1 = new IncomeExt(con); temp1.attachIncome(); temp1.save(); //test.stopTest(); } }
In test context : TestMethod do not support getContent call, test skipped , a VisualforceException is given and test is skipped after this.
So this part reamin uncovered
Attachment a = new Attachment(parentId = q.id, name=q.id + '.pdf', body = pdfBlob);
insert a;
return('test');
So Solution is
Change Your class to this
public class IncomeExt {
public Income__c q {get;set;}
public IncomeExt (ApexPages.StandardController c)
{
controller = c;
q = (Income__c) c.getRecord();
}
public void save()
{}
public String attachIncome()
{
PageReference pdfPage = Page.AD672PDF;
pdfPage.getParameters().put('id',q.id);
Blob pdfBlob;
if(!Test.isRunningTest())
{
pdfBlob = pdfPage.getContent();
}
else
{
pdfBlob = Blob.valueOf('Unit Test Attachment Body');
}
Attachment a = new Attachment(parentId = q.id, name=q.id + '.pdf', body = pdfBlob);
insert a;
return('test');
}
private ApexPages.StandardController controller;
}
And Test Class to this
@IsTest private with sharing class IncomeExtTest {
static testMethod void myPage_Test()
{
//PageReference pageRef = Page.AD672;
//Test.setCurrentPageReference(pageRef);
Income__c iT = new Income__c(Name = 'TestIncomeTax');
insert iT;
ApexPages.StandardController con = new ApexPages.StandardController(iT);
// create an instance of the controller
//test.startTest();
IncomeExt temp1 = new IncomeExt(con);
temp1.attachIncome();
temp1.save();
//test.stopTest();
}
}
Hi ,
First you have to create Income__c() object and send that object to standard controller.
Income__c obj =new Income__c();
obj .Name='test';
otherfileds.....
ApexPages.StandardController con = new ApexPages.StandardController(obj );
I hope you are talking about this part not covered
Attachment a = new Attachment(parentId = q.id, name=q.id + '.pdf', body = pdfBlob);
insert a;
return('test');
In test context : TestMethod do not support getContent call, test skipped , a VisualforceException is given and test is skipped after this.
As I Explained earlier
In test context : TestMethod do not support getContent call, test skipped , a VisualforceException is given and test is skipped after this.
So this part reamin uncovered
So Solution is
Change Your class to this
And Test Class to this