Hello Moandji,

I want to test the CachedFileReader later with a simple test and a mock a 
IFileReader like this:

IFileReader mockreader = MockCreater.createMock(IFileReader filereader);
CachedFileReader objecttotest = new CachedFileReader(filereader);

Is it a good idea to inject the FileReader directly into the 
CachedFileReader? My CachedFileReader class then directly depends on a 
concrete class not on an interface. I imagine I could create another 
HttpFileReader class. Then my CachedFileReader should use the 
HttpFileReader within the constructor via guice not the "normal" FileReader 
class. Is there a solution for this problem?

But this solution is at least much better than my current workaround, thank 
you.

Dirk

Am Sonntag, 16. Dezember 2012 12:27:48 UTC+1 schrieb Moandji Ezana:
>
> Simply inject FileReader into CachedFileReader instead of IFileReader.
>
> Moandji
> On Dec 16, 2012 1:11 PM, "Dirk Nimerem" 
> <[email protected]<javascript:>> 
> wrote:
>
>> Hello,
>>
>> i defined the following interface:
>>
>> @ImplementedBy(FileSystem.class)
>> public interface IFileSystem {
>> public String getFileContent(String filepath) throws IOException;
>> public long getLastModified(String filepath) throws IOException;
>> }
>>
>> and implementing class:
>>
>> @Singleton
>> public class FileReader implements IFileReader {    
>> @Override
>> public String getFileContent(String filepath) throws IOException {
>> return FileUtils.readFileToString(new File(filepath));
>> }
>>
>> @Override
>> public String getLastModified(String filepath) throws IOException {
>> return (new File(filepath)).lastModified();
>> }
>> }
>>
>> This should encapsulate these file operations on the harddisk. And I'm 
>> also able to mock this interface while testing my classes.
>> Now i would like to provide a CachedFileReader implementing which should 
>> cache any file *(I keep the example as small as possible without take 
>> note on file changes or anything else)*:
>>
>> @Singleton
>> public class CachedFileReader implements IFileReader {
>> private final HashMap<String, String> cache = new HashMap<String, String> 
>> ();
>> private final IFileReader filereader;
>>     
>> @Override
>> public String getFileContent(String filepath) throws IOException {
>> String key = filepath + String.valueOf(getLastModified(filepath)); // I 
>> know this is a crap solution, its just for this example
>>
>> if (!(cache.containsKey(filepath)) {
>> cache.put(filepath, filereader.getFileContent(filepath));
>> }
>> return cache.get(filepath);
>> }
>>
>> @Override
>> public String getLastModified(String filepath) throws IOException {
>> return filereader.getLastModified(filepath);
>> }
>>
>> @Inject
>> public CachedFileReader(IFileReader filereader) {
>> this.filereader = filereader;
>> }
>>  }
>>
>> I haven't inherited from FileReader because I want later be able to test 
>> the CachedFileReader itself with a IFileReader mock object passed to the 
>> constructor.
>> Also I changed the @ImplementedBy Annotation of my IFileReader interface 
>> to CachedFileReader. So every class which needs a IFileReader now gets 
>> the CachedFileReader instance.
>>
>> But how can I tell Google Juice tell that it should inject the normal 
>> FileReader to the constructor of the CachedFileReader instead of itself? Is 
>> there an annotation for that? I have read about multibindings but it didn't 
>> helped me. Or is there a better solution for my concern?
>>
>> Thank you in advance,
>> Dirk
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "google-guice" group.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msg/google-guice/-/Q0mkVSYi3RsJ.
>> To post to this group, send email to [email protected]<javascript:>
>> .
>> To unsubscribe from this group, send email to 
>> [email protected] <javascript:>.
>> For more options, visit this group at 
>> http://groups.google.com/group/google-guice?hl=en.
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-guice/-/dNFiHY_eurwJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice?hl=en.

Reply via email to