could anyone help in writing a test class for the following code
global class CaptureLastLoginDate implements Database.Batchable<sObject>{
//This is the query that is passed to the execute method. .
String ids = UserInfo.getUserId();
String query = 'SELECT id, LastLoginDate,LastLoginDate__c FROM User ';
global database.queryLocator start(Database.BatchableContext BC) {
System.debug(query);
return database.getQueryLocator(query);
}
//close start method
global void execute(Database.BatchableContext BC, List<sObject> scope){
List<Schema.User> u = new List<Schema.User> ();
for(sObject s: Scope){
Schema.User inv = (Schema.User)s;
inv.LastLoginDate__c= inv.LastLoginDate;
u.add(inv);
System.debug(u);
}
update u;
}
global void finish(Database.BatchableContext sc){
}
}
Update
Thank you for the replying. Here is the test method I'm using:
@IsTest(SeeAllData=true)
Private class LastLogintest
{
String ids = UserInfo.getUserId();
// Making the assumption that at least one user will match this. Better to assign to list and check that has at least one record.
Schema.User testUser = [Select Id, LastLoginDate__c from User where LastLoginDate != null limit 1];
// Set it to anything other than LastLoginDate so we can tell it has changed.
testUser.LastLoginDate__c = null;
update testUser;
Test.startTest();
CaptureLastLoginDate captureBatch = new CaptureLastLoginDate();
// Modify the query here so we only get our one testing user of interest
captureBatch.query = 'SELECT id, LastLoginDate,LastLoginDate__c FROM User where Id =: testUser.Id limit 1';
ID batchprocessid = Database.executeBatch(captureBatch);
Test.StopTest();
User afterBatchUser = [Select Id, LastLoginDate, LastLoginDate__c from User where Id =:testUser.Id limit 1];
System.AssertEquals(afterBatchUser.LastLoginDate, afterBatchUser.LastLoginDate__c);
}
ERROR:Error: Compile Error: unexpected token: 'testUser.LastLoginDate__c' at line 10 column 3