Closed kairichard closed 6 years ago
@kairichard You must explicitly pass the argument seed
to the data provider. Example:
>>> from mimesis import Food
>>> food = Food('en', seed=0x7b)
>>> food.dish()
'Biscuit'
>>> food = Food('en', seed=0x7b)
>>> food.dish()
'Biscuit'
@kairichard If you want to use one seed
for any providers then you can use Generic
data provider:
>>> from mimesis import Generic
>>> generic = Generic('de', seed=0xf)
>>> generic.food.dish()
'Kartoffelklöße'
>>> generic.personal.full_name()
'Adie Jans'
@lk-geimfari Needing to manually seed the concrete implementation requires modification to the code under test. Which in general is something I try to avoid.
@duckyou Can you advise anything, please?
@kairichard If I understood correctly, you want use global seed for all providers (not like generic
, where each new provider have its own seed). Unfortunately at this moment it is not supported. :pensive:
But you can try use setUp or setUpClass
import unittest
from mimesis import Food
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.cls_food = Food('en', seed='asd')
def setUp(self):
self.food = Food('en', seed='asd')
def test_first_food_dish(self):
print("test_first_food_dish:")
print("setUpClass >>", self.cls_food.dish())
print("setUp 1>>", self.food.dish())
print("setUp 2>>", self.food.dish())
def test_second_food_dish(self):
print("test_second_food_dish:")
print("setUpClass >>", self.cls_food.dish())
print("setUp 1>>", self.food.dish())
print("setUp 2>>", self.food.dish())
if __name__ == "__main__":
unittest.main()
Output:
test_first_food_dish:
setUpClass >> Slinger
setUp 1>> Slinger
setUp 2>> Hummus
test_second_food_dish:
setUpClass >> Hummus
setUp 1>> Slinger
setUp 2>> Hummus
@duckyou Thanks for effort you put into answering my question. Now I feel a bit ashamed noticing that my initial example is a bit misleading. I am using your awesome lib to produce names for things and I have an integration test that verify things get names. What I wanted to do is hardwire the test output. Something like this:
import unittest
import random
from service import App
class Test(unittest.TestCase):
def test_names(self):
result = App.create_thing()
self.assertEqual(result.name, "ice-cream")
if __name__ == "__main__":
random.seed("123")
unittest.main()
HTH. What I am currently doing is seeding via os.env
somewhere in service
which is ok for now.
Thanks again for answering my questions.
Consider the following code:
I would expect that for consecutive runs the same
dish
is printed but it's not:The question now is whether that is expected behavior? I know there is a specific seed for each
Provider
. Because I find it a bit annoying, requiring me to jump a few more hoops to get this under test.