I think I understand(?) it, but you should validate the test TopicIsReadOnly in TopicCacheProviderTests after checkin. That code is probably more complex than the actual cache implementation.
John Davidson On 10/22/07, Craig Andera <[EMAIL PROTECTED]> wrote: > > Also, I have made progress on creating Unit Tests as promised with a > > number for NamespaceManager and FileSystemStore. I was less than > > successful when I tried to add some to the TopicCacheProvider. The > > existing tests there are not easy to follow and replicate. Could you > > provide some hints. > > Not easy to follow? Sorry about that. Let me try to explain them a bit. > > The first slightly confusing bit is the use of DoTest. This is just me > trying to reduce what would otherwise be massive code duplication. I'm using > an anonymous delegate that forms a closure, which is somewhat unusual for > many C# developers. If you're not familiar, just think of it as a callback: > DoTest does a bunch of setup, then calls back to the block inside the > braces, passing in a TestParameters that contains references to the > Federation, NamespaceManager, TopicCacheProvider, etc. etc. > > As far as the structure of the tests themselves, basically the trick is to > make multiple calls against a particular operation, and then to verify that > the first one comes from the store and the second one comes from cache. We > also verify that the various "write operations" (i.e. DeleteTopic, > WriteTopic, LockTopic, etc.) cause the cache to flush, and for subsequent > operations to go all the way to the store again. > > The way that I determine whether a retrieval comes from the store is pretty > simple. All the tests run against MockContentStore, which has a series of > Boolean flags that correspond to the methods of IContentProvider. When a > method is called, the corresponding flag is set. So, for example, the > implementation of MockContentStore.AllTopics looks like this [1]. The key is > that first line where we set _allTopicsCalled to true. There's a > corresponding property on MockCnotentStore called AllTopicsCalled [2] that > just returns this value. So if I clear the value, then call AllTopics, then > check this value, I can tell whether the operation returned a value from > cache, or whether the call made it all the way through the pipeline to the > content store. Which is what I want to test. > > Does that make sense? > > > [1] > public override QualifiedTopicNameCollection AllTopics() > { > _allTopicsCalled = true; // Note this line!!! > > QualifiedTopicNameCollection topics = new > QualifiedTopicNameCollection(); > > foreach (MockTopic topic in AllTopics(ExistencePolicy.ExistingOnly)) > { > topics.Add(new QualifiedTopicName(topic.Name, this.Namespace)); > } > > return topics; > } > > [2] > internal bool AllTopicsCalled > { > get { return _allTopicsCalled; } > set { _allTopicsCalled = value; } > } > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Flexwiki-users mailing list > Flexwiki-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/flexwiki-users > ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Flexwiki-users mailing list Flexwiki-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/flexwiki-users