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 -~----------~----~----~----~------~----~------~--~---