Q: Batch Apex stateful member variable behavior in test class Are stateful member variable of Batch Apex class maintain state after finish method when accessed in a test method. e.g. 
global  class SampleBatch implements      Database.Batchable<SObject>,Database.Stateful {

    global integer count;
    global SampleBatch (){count =0;} 
    //START
    global Database.QueryLocator start(Database.BatchableContext BC) {         
        return Database.getQueryLocator(queryString);                 
    }    

    //EXECUTE 
    global void execute (Database.BatchableContext BC,List<sObject> scope){
     count++;
    }
    //FINISH
    global void finish(Database.BatchableContext BC){
    }


}

When I try to access count variable in Apex Test Class it gives me value as 0, is it expected behavior?

A: Yes, this is the expected behavior, but not for the reason you think. When you call Database.executeBatch, it serializes the class and keeps a copy of it. That means that the class instance you pass to Database.executeBatch is not the same instance that runs when the class is later executed (after Test.stopTest).
If you want to get the value back out (perhaps to verify the unit test behavior), you need to put the result in a static variable:
global  class SampleBatch implements      Database.Batchable<SObject>,Database.Stateful {

    global integer count;
    @TestVisible static Integer testCount;

    global SampleBatch (){count =0;} 
    //START
    global Database.QueryLocator start(Database.BatchableContext BC) {         
        return Database.getQueryLocator(queryString);                 
    }    

    //EXECUTE 
    global void execute (Database.BatchableContext BC,List<sObject> scope){
     count++;
    }
    //FINISH
    global void finish(Database.BatchableContext BC){
        testCount = count;
    }
}

You can then validate the result afterwards:
Test.startTest();
Database.executeBatch(new SampleBatch());
Test.stopTest();
System.assertEquals(1, SampleBatch.testCount);

If your batch class were doing something else, like modifying records, you could verify the results by using a query.

A: As per the documentation related to Batch Apex

If you specify Database.Stateful in the class definition, you can
  maintain state across these transactions. When using
  Database.Stateful, only instance member variables retain their values
  between transactions. Static member variables don't retain their
  values and are reset between transactions. Maintaining state is useful
  for counting or summarizing records as they're processed. For example,
  suppose your job processed opportunity records. You could define a
  method in execute to aggregate totals of the opportunity amounts as
  they were processed.

So, answer to your first point:

  
*
  
*Are stateful member variable of Batch Apex class maintain state after finish method when accessed in a test method
  

Ans: No (you need static member as mentioned in an asnwer from @sfdcfox)
P.S. I was about to answer the other point but answers have come on that from others.
