[Tutor] Need help with two similar test cases that I have written. One works and the other fails

Anubhav Yadav anubhav1691 at gmail.com
Sat Feb 6 11:07:32 EST 2016


Hello Everyone,

I am trying to write a simple program that generated random numbers based
on some rules.
when my program is in the yellow state, it should generate the numbers
from 100.0-100.5
and 102.5-103.0. When my program is in the red state, it should generate
numbers in the range
less than 99.9 and greater than 103.1.

I have written two very simple functions, and two unittest.TestCase test
cases to test the two functions. I somehow feel that both my test cases
doesn't make any sense, yet one of it passes perfectly and other one does
not pass.

Here is my code:

import random
import unittest

red_temperature_min = 99.9
red_temperature_max = 103.0
normal_temperature_min = 101.0
normal_temperature_max = 102.0
yellow_temperature_min = 100.0
yellow_temperature_max = 103.0

def red_temperature_simulation():
    """
    Method to simulate the red temperature condition
    """
    choice = random.randint(0,1)
    if choice:
        return round(random.uniform(red_temperature_min - 5.0,
                                red_temperature_min))
    else:
        return round(random.uniform(red_temperature_max,
                                red_temperature_max + 5.0))

def yellow_temperature_simulation():
    """
    Method to simulate the yellow temperature condition
    """
    choice = random.randint(0,1)
    if choice:
        return round(random.uniform(yellow_temperature_min,
                                    normal_temperature_min - 0.5), 2)
    else:
        return round(random.uniform(normal_temperature_max + 0.5,
                                    yellow_temperature_max), 2)


class TestCase(unittest.TestCase):
    def test_red_temperature_simulation(self):
        """
        Method to test the red_temperature_simulation method
        """
        for i in range(100000):
            self.assertLess(red_temperature_simulation(), 100.0) and \
                self.assertGreater(red_temperature_simulation(), 103.0)

    def test_yellow_temperature_simulation(self):
        """
        Method to test the yellow_temperature_simulation method
        """
        for i in range(1000000):
            (self.assertGreaterEqual(yellow_temperature_simulation(),
                                 100.0)) and \
            (self.assertLessEqual(yellow_temperature_simulation(),
                              100.5)) and \
            (self.assertGreaterEqual(yellow_temperature_simulation(),
                                 102.5)) and \
            (self.assertLessEqual(yellow_temperature_simulation(), 103.0))



I try to test if a number 99.7 is less than 100.0 and at the same time I
also check if it's greater than 102.5. The sentence itself doesn't make
sense, but somehow the test case for yellow passes, but the test case for
red fails. I have also tried using and instead of or!

I want to test my code, is there a better way of doing it?

Thank You.


More information about the Tutor mailing list