That sounds like an even better solution, thanks!-Darin

On Tue, Mar 3, 2009 at 4:49 PM, William Chan (陈智昌) <willc...@chromium.org>wrote:

> My old team never really used FRIEND_TEST.  We found it ugly that our
> production code depended on test code.  We typically used friended
> "Peer" classes defined in the unittest file, but not in the anonymous
> namespace.  These are simple shims that provide access to the private
> section.  It also saves on having to FRIEND_TEST each individual test
> as you add them.  It looks like almost every time FRIEND_TEST is used,
> it's used for multiple tests, not just a single one.  I'm not sure how
> much of a problem chrome has with build dependencies leading to
> rebuilds, but it was very annoying in google projects to add a
> FRIEND_TEST to a widely used .h file, thus forcing everyone to
> rebuild, even though you're only adding a new test.
>
> On Tue, Mar 3, 2009 at 4:30 PM, Darin Fisher <da...@chromium.org> wrote:
> > On Tue, Mar 3, 2009 at 3:55 PM, Scott Hess <sh...@chromium.org> wrote:
> >>
> >> On the Mac, code like this:
> >>
> >> namespace {
> >> class MyTest : public testing::Test {
> >> };
> >> }  // namespace
> >>
> >> TEST_F(MyTest, ATest) {
> >> }
> >>
> >> generates errors like this:
> >> warning: ‘MyTest_ATest_Test’ has a field
> >> ‘MyTest_ATest_Test::<anonymous>’ whose type uses the anonymous
> >> namespace
> >> warning: ‘MyTest_ATest_Test’ has a base ‘<unnamed>::MyTest’ whose type
> >> uses the anonymous namespace
> >>
> >> Removing the namespace fixes it, which is poor because we seem to want
> >> to move towards more anonymous namespace use.  Putting the test case
> >> inside the namespace also fixes it, but is incompatible with
> >> FRIEND_TEST().  This seems to be a gcc 4.2 addition, per:
> >>  http://gcc.gnu.org/gcc-4.2/changes.html
> >>
> >> "Members of the anonymous namespace are now local to a particular
> >> translation unit, along with any other declarations which use them,
> >> though they are still treated as having external linkage for language
> >> semantics."
> >>
> >> At this point, I'm sort of at the bleeding edge of my knowledge.  For
> >> FRIEND_TEST() cases, it seems like the anonymous namespace needs to
> >> go, but elsewhere it can be changed to enclose the entire file.  Does
> >> that seem reasonable for now?
> >>
> >> -scott
> >
> >
> > Assuming that you really need to use TEST_F, then it would be unfortunate
> to
> > lose the anonymous namespace.  The anonymous namespace has allowed us to
> > have short names for helper classes used by tests without fear of
> colliding
> > with other short names used by other tests.  (We have had those kinds of
> > conflicts in the past.)
> > We don't use FRIEND_TEST that much.  Maybe we can just use #ifdef
> UNIT_TEST
> > to expose class APIs to unit tests?
> > -Darin
> > > >
> >
>

--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: chromium-dev@googlegroups.com 
View archives, change email options, or unsubscribe: 
    http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to