Re: Am I Running Under NUnit?
"Charlie Poole" <[email protected]>
| Newsgroups | gmane.comp.windows.dotnet.nunit.user |
|---|---|
| Message-ID | <00ce01c89f31$a073b2d0$6401a8c0@ferrari> |
Hi Ron, > Yes, I know reflection :) I figured. > I don't understand what's the difficulty in exposing a static > property. Why does AppDomains play a part here? After all, > there is some class Foo (static or not), with a method Bar > (static or not), that runs some loop (with reflection). Why > shouldn't this class expose a property (static or not :)) > that let's us know it's currently running tests? AppDomains play a part because they are the primary way that tests are isolated from NUnit and because statics are instantiated for each AppDomain. If your production code is to access an object - as opposed to a static property - it needs to get that object from somewhere. If your code instantiates the object, then it will not have the knowledge you require - you want the actual object that kicked off your code. Ultimately, this requires either direct or indirect access through a static or some kind of dependency injection, with NUnit functioning as a container. The first seems simplest. > It's not obligatory to use this property or reference NUnit > from production code, but if a user wishes to do so, I think > he should have the possibility. Yes. Charlie > > > On Tue, Apr 15, 2008 at 10:23 PM, Charlie Poole > <[email protected]> wrote: > > > > > > Hi Ron, > > > > What you suggest would be easy if we had not gone to such great > > lengths to isolate NUnit from the test code. :-) > > > > The part of NUnit that runs tests (we call it the core) has no > > reference to the part that you use in your tests (we call it the > > framework) and the framework has no reference to the core. It's all > > done by reflection - or smoke and mirrors if you like. > > > > So, exposing a read-only property begs the question: a property of > > what? It has to be some object that you can get access to. > > > > Providing you are only referencing the framework, it would > be possible > > to have some sort of static or singleton that you checked to see if > > NUnit was running in the current AppDomain - of course if you are > > creating other AppDomains, that won't work either... > > > > That might be something like > > if ( NUnit.Framework.TextContext.CurrentContext != null ) > > ... > > > > If that would suit you, it's a possibility for 3.0, where > we will have > > a context for tests to refer to. > > > > Charlie > > > > > > ________________________________ > > > > From: Ron Gross [mailto:[email protected]] > > Sent: Tuesday, April 15, 2008 11:23 AM > > To: Charlie Poole > > Cc: [email protected] > > > > > > Subject: Re: [Nunit-users] Am I Running Under NUnit? > > > > > > > > What I mean is this: I would like NUnit to expose some > boolean method > > or property that simply says if your main core that loops > through the > > unit tests has begun. > > I'm sure you have method in your code similar to: > > > > void RunSelectedTests() > > { > > .. > > foreach (test in unit tests) > > { > > ... > > test.Run(); > > } > > } > > > > What I want is a slight addition to this method: > > > > void RunSelectedTests() > > { > > .. > > _runningUnderNUnit = true; > > foreach (test in unit tests) > > { > > ... > > test.Run(); > > } > > } > > > > With the variable _runningUnderNUnit exposed through a > read-only property. > > Seems rather easy to implement. > > > > I'm referencing NUnit from some of my production code, > because there > > are certain things (logging, for example) that I want to do only if > > I'm in the context of a unit test, and my current method of > detecting > > if I'm in NUnit or not, from this post, requires a reference. I'm > > aware that there are other ways to accomplish this, > configuration for > > example, but the above approach seems simpler. > > > > > > On Tue, Apr 15, 2008 at 8:49 PM, Charlie Poole > > <[email protected]> > > wrote: > > > > > > > > > > > Hi Ron, > > > > > > Our conversation appears to have fallen off the list - I > put us back > > > on > > it. > > > > > > I'm confused... You already reference NUnit from your > production code? > > > I'm assuming that's what we are talking about - if you want to > > > figure out whether your tests are running under NUnit or > some other > > > runner, that's a different - perhaps a simpler - matter. > > > > > > As far as being forced to use a hack: the entire notion > seems like a > > > hack to me, and NUnit can't do anything to improve it. We > can't even > > > hide the hack for you, since we have no general way to > determine if > > > some arbitrary code is running under NUnit - and it would > have to be > > > a general solution if NUnit implemented it, while you can > simply do > > > something that works for your own particular case. > > > > > > In fact, NUnit's lack of knowledge of where threads originate is > > > already a source of difficulty for us - one I hope to > solve as part > > > of the 3.0 > > rewrite. > > > > > > If I'm misunderstanding something here, please let me > know, but this > > > does not sound like a service NUnit can readily provide. > > > > > > Charlie > > > > > > I > > > > > > > > > ________________________________ > > > > > From: Ron Gross [mailto:[email protected]] > > > Sent: Monday, April 14, 2008 11:13 PM > > > > > > > > > > > > To: Charlie Poole > > > Subject: Re: [Nunit-users] Am I Running Under NUnit? > > > > > > > > > > > > > > > > > > So you think it's better for me to do this hacks than for you to > > > expose a > > method? > > > After all, I am dependant on NUnit and reference it anyway. > > > > > > Only this way, I'm forced to these ugly hacks. > > > > > > > > > On Tue, Apr 15, 2008 at 12:52 AM, Charlie Poole > > <[email protected]> wrote: > > > > > > > > > > > > > > > Yes, your original method suffers from the same problem > if threads > > > > are > > involved. > > > > > > > > If we exported such a function, then people would have to > > > > reference it, > > making their apps > > > > dependent on NUnit - so no. :-) > > > > > > > > Another possibility is to look at the entry assembly and see if > > > > it's > > nunit.exe or nunit.console. > > > > However, that may not work in a secondary AppDomain - > I'm not sure. > > > > > > > > Charlie > > > > > > > > > > > > > > > > ________________________________ > > From: Ron Gross [mailto:[email protected]] > > > > Sent: Monday, April 14, 2008 1:13 PM > > > > To: Charlie Poole > > > > Subject: Re: [Nunit-users] Am I Running Under NUnit? > > > > > > > > > > > > > > > > > > > > > > > > The 2nd way is not perfect, because if the call is made from > > > > another > > thread then its stack will not have any NUnit frames. > > > > Is there a chance such a function can be exported from NUnit > > > > itself in > > some future release? > > > > > > > > > > > > On Mon, Apr 14, 2008 at 10:15 PM, Charlie Poole > > <[email protected]> wrote: > > > > > > > > > > > > > > > > > > > Hi Ron, > > > > > > > > > > The code is wrong on several levels: > > > > > > > > > > 1) Tactically, because it will fail if your test references a > > different version of the framework than the one it > > > > > was built against. > > > > > > > > > > 2) Strategically, because the presense of a Test attribute > > > > > doesn't > > have to mean your test is running under > > > > > NUnit. However, it may be so for a particular user who never > > > > > calls the > > tests any other way. > > > > > > > > > > There are two simple ways to test whether you are > running under > > NUnit... > > > > > > > > > > One is to look at the friendly name of the current appdomain, > > > > > which is > > "domain-<project>" where <project> > > > > > is the name of the assembly or project being executed. > > > > > Obviously, this > > is subject to name clashes. > > > > > > > > > > The other - and more accurate - is to search the > stack for the > > > > > name of > > the nunit.core assembly. > > > > > > > > > > Charlie > > > > > > > > > > > > > > > ________________________________ > > From: [email protected] > > [mailto:[email protected]] On Behalf Of Ron > > Gross > > > > > Sent: Monday, April 14, 2008 7:50 AM > > > > > To: [email protected] > > > > > Subject: [Nunit-users] Am I Running Under NUnit? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > How can I implement a function AmIRunningUnderNUnit() ? > > > > > I have a logger, and I want to Log only if I'm > running under NUnit. > > > > > > > > > > This is a suggested solution: > > > > > http://geekswithblogs.net/ajohns/archive/2004/08/05/9389.aspx > > > > > > > > > > But it doesn't work if the test spawns different > threads and the > > function is called from there. > > > > > > > > > > Thanks, > > > > > Ron > > > > > > > > > > > > > ---------------------------------------------------------------------- > > --- > > > > > This SF.net email is sponsored by the 2008 JavaOne(SM) > > > > > Conference Don't miss this year's exciting event. > There's still > > > > > time to save > > $100. > > > > > Use priority code J8TL2D2. > > > > > > > > http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com > > /javaone > > > > > _______________________________________________ > > > > > Nunit-users mailing list > > > > > [email protected] > > > > > https://lists.sourceforge.net/lists/listinfo/nunit-users > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone