fixture with "test_" prefix should be raise an error
Hi,
I've got it from the `yield_fixture`, where there is exception:
``` ~/.venv/bin/slash:11
>        load_entry_point('slash==1.1.6', 'console_scripts', 'slash')()
 ~/.venv/local/lib/python2.7/site-packages/slash/core/fixtures/utils.py:108
>        @context.fixture.add_cleanup
E    AttributeError: 'NoneType' object has no attribute 'add_cleanup'
```
But also on regular fixture, the test loader consider it as additional test, which is not.

```
$ cat a.py 
import slash

@slash.fixture
def test_my_fixture():
    return

@slash.yield_fixture
def test_my_yield_fixture():
    yield

def test_my_test(test_my_fixture, test_my_yield_fixture):
    pass

$ slash run a.py 
3 tests collected   
a.py ..E  FAIL
===================================== Session Summary ======================================
== #3: a.py:test_my_yield_fixture ==========================================================
 - 1/1 E (2017-01-25 10:39:42 +02:00):   - - - - - - - - - - - - - - - - - - - - - - - - - -
 ~/.venv/bin/slash:11
>        load_entry_point('slash==1.1.6', 'console_scripts', 'slash')()
 ~/.venv/local/lib/python2.7/site-packages/slash/core/fixtures/utils.py:108
>        @context.fixture.add_cleanup
E    AttributeError: 'NoneType' object has no attribute 'add_cleanup'
== Session ended. 2 successful, 0 skipped, 0 failures, 1 errors. Total duration: 00:00:00 ==
```
diff --git a/doc/changelog.rst b/doc/changelog.rst
index 09733e7..ddfcc70 100644
--- a/doc/changelog.rst
+++ b/doc/changelog.rst
@@ -2,6 +2,7 @@ Changelog
 =========
 
 * :feature:`507` Test id can now be obtained via ``slash.context.test.id``
+* :bug:`510 major` Explicitly fail fixtures which name is valid for tests (currently: test_ prefix)
 * :feature:`511` Support adding external logs ``Result.add_extra_log_path`` which will be retrieved by ``Result.get_log_paths()``
 * :feature:`502` Added ``session_interrupt`` hook for when sessions are interrupted
 * :release:`1.1.0 <22-11-2016>`
diff --git a/slash/core/fixtures/fixture_store.py b/slash/core/fixtures/fixture_store.py
index 44d4bca..762eecb 100644
--- a/slash/core/fixtures/fixture_store.py
+++ b/slash/core/fixtures/fixture_store.py
@@ -8,9 +8,10 @@ from orderedset import OrderedSet
 from ..._compat import OrderedDict, iteritems, itervalues, reraise
 from ...ctx import context as slash_context
 from ...exception_handling import handling_exceptions
-from ...exceptions import CyclicFixtureDependency, UnresolvedFixtureStore, UnknownFixtures
+from ...exceptions import CyclicFixtureDependency, UnresolvedFixtureStore, UnknownFixtures, InvalidFixtureName
 from ...utils.python import get_arguments
 from ..variation_factory import VariationFactory
+from ..test import is_valid_test_name
 from .active_fixture import ActiveFixture
 from .fixture import Fixture
 from .namespace import Namespace
@@ -215,6 +216,8 @@ class FixtureStore(object):
         existing_fixture = self._fixtures_by_id.get(fixture_info.id)
         if existing_fixture is not None:
             return existing_fixture.fixture_func
+        if is_valid_test_name(fixture_info.name):
+            raise InvalidFixtureName('Invalid fixture name: {0.name}'.format(fixture_info))
         fixture_object = Fixture(self, fixture_func)
         current_namespace = self._namespaces[-1]
         current_namespace.add_name(fixture_info.name, fixture_info.id)
diff --git a/slash/core/test.py b/slash/core/test.py
index c11e497..f3c0284 100644
--- a/slash/core/test.py
+++ b/slash/core/test.py
@@ -154,3 +154,7 @@ def is_abstract_base_class(cls):
     .. seealso:: :func:`abstract_test_class`
     """
     return bool(cls.__dict__.get("__slash_abstract__", False))
+
+
+def is_valid_test_name(name):
+    return name.startswith('test_')
diff --git a/slash/exceptions.py b/slash/exceptions.py
index 265e4a5..d9bd140 100644
--- a/slash/exceptions.py
+++ b/slash/exceptions.py
@@ -42,6 +42,10 @@ class InvalidFixtureScope(FixtureException):
     pass
 
 
+class InvalidFixtureName(FixtureException):
+    pass
+
+
 class IncorrectScope(SlashException):
     pass
 
diff --git a/slash/loader.py b/slash/loader.py
index 8f78f0c..d6c3431 100644
--- a/slash/loader.py
+++ b/slash/loader.py
@@ -16,7 +16,7 @@ from .ctx import context
 from .core.local_config import LocalConfig
 from . import hooks
 from .core.runnable_test import RunnableTest
-from .core.test import Test, TestTestFactory
+from .core.test import Test, TestTestFactory, is_valid_test_name
 from .core.function_test import FunctionTestFactory
 from .exception_handling import handling_exceptions
 from .exceptions import CannotLoadTests
@@ -187,7 +187,7 @@ class Loader(object):
             return TestTestFactory(thing)
 
         if isinstance(thing, FunctionType):
-            if thing.__name__.startswith('test_'):
+            if is_valid_test_name(thing.__name__):
                 return FunctionTestFactory(thing)
 
         return None
diff --git a/tests/test_fixtures.py b/tests/test_fixtures.py
index cfc7412..d17b9d1 100644
--- a/tests/test_fixtures.py
+++ b/tests/test_fixtures.py
@@ -2,6 +2,7 @@ import pytest
 import operator
 
 from slash._compat import reduce
+from slash.exceptions import InvalidFixtureName
 
 
 def test_fixtures(suite, suite_test, defined_fixture):
@@ -103,3 +104,13 @@ def test_fixture_and_parameter(suite, suite_test, get_fixture_location):
     suite_test.add_parameter()
     suite_test.depend_on_fixture(fixture)
     suite.run()
+
+
+def test_fixture_which_name_startswith_test(suite):
+    fixture = suite.slashconf.add_fixture(name='test_my_fixture')
+    suite[-1].depend_on_fixture(fixture)
+    for test in suite:
+        test.expect_deselect()
+    summary = suite.run()
+    assert not summary.ok()
+    assert 'Invalid fixture name' in summary.get_console_output()
diff --git a/tests/utils/suite_writer/fixture.py b/tests/utils/suite_writer/fixture.py
index 0aae0a6..26ea4b5 100644
--- a/tests/utils/suite_writer/fixture.py
+++ b/tests/utils/suite_writer/fixture.py
@@ -1,13 +1,15 @@
+from uuid import uuid4
 import itertools
-from contextlib import contextmanager
 
 from .function import Function
 
 
 class Fixture(Function):
 
-    def __init__(self, suite, file, scope=None, autouse=False):
-        super(Fixture, self).__init__(suite)
+    def __init__(self, suite, file, scope=None, autouse=False, name=None):
+        if name is None:
+            name = 'fx_{}'.format(str(uuid4()).replace('-', '')[:6])
+        super(Fixture, self).__init__(suite, name=name)
         self.file = file
         self.scope = scope
         self.autouse = autouse
@@ -22,9 +24,6 @@ class Fixture(Function):
         self._write_fixture_decorator(code_formatter)
         super(Fixture, self)._write_decorators(code_formatter)
 
-    def _get_function_name(self):
-        return 'fx_{0}'.format(self.id)
-
     def _write_prologue(self, code_formatter):
         if not self.suite.debug_info:
             return
['tests/test_fixtures.py', 'slash/exceptions.py', 'slash/core/test.py', 'doc/changelog.rst', 'tests/utils/suite_writer/fixture.py', 'slash/loader.py', 'slash/core/fixtures/fixture_store.py']