2017-02-21 72 views
12

Próbuję zrobić test. Wyniki "Oczekiwane" i "Uzyskane" są identyczne, ale mój test nadal nie udaje się. Zawodzi, ponieważ na wydruku są spacje końcowe po x-axis y-axis, których nie umieściłem w moim docstringu. Jak jednak to uwzględnić? Kiedy wstawiam spacje ręcznie i wykonuję test, działa z powodzeniem tak długo, jak długo utrzymuję tam kursor.Jak wstawiać spacje końcowe w doctest, aby nie zawodziły, nawet jeśli rzeczywisty i oczekiwany rezultat wygląda tak samo?

oś X oś y ______________________ [kursor tutaj]

Jednakże, jeśli uruchomić test z moim kursor gdzieś indziej, wówczas końcowe spacje zostaną usunięte, a test nie powiedzie się.

Wiem, że brzmi to naprawdę dziwnie, ale tak właśnie jest!

Jest to kod:

import pandas as pd 
import doctest 


class NewDataStructure(pd.DataFrame): 
    """ 
    >>> arrays = [[1, 1, 2, 2], [10, 20, 10, 20]] 
    >>> index = pd.MultiIndex.from_arrays(arrays, names=('x-axis', 'y-axis')) 
    >>> data_input = {"Pressure (Pa)": [1+1j, 2+2j, 3+3j, 4+4j], 
    ...    "Temperature": [1, 2, 3, 4]} 
    >>> new_data_variable = NewDataStructure(data=data_input, index=index, title="Pressures and temperatures") 
    >>> print new_data_variable 
    New Data Structure Pressures and temperatures: 
        Pressure (Pa) Temperature 
    x-axis y-axis        
    1  10    (1+1j)   1 
      20    (2+2j)   2 
    2  10    (3+3j)   3 
      20    (4+4j)   4 

    """ 
    def __init__(self, data, index, title): 
     super(NewDataStructure, self).__init__(data=data, index=index) 
     self.title = title 

    def __str__(self): 
     return "New Data Structure {}:\n{}".format(self.title, super(NewDataStructure, self).__str__()) 

doctest.testmod() 

Poniżej jest mój wynik, jeśli nie powiedzie się. Nawet tutaj powinieneś być w stanie wybrać obszar po x-axis y-axis i wykryć, czy są spacje końcowe, czy nie.

Failed example: 
    print new_data_variable 
Expected: 
    New Data Structure Pressures and temperatures: 
        Pressure (Pa) Temperature 
    x-axis y-axis 
    1  10    (1+1j)   1 
      20    (2+2j)   2 
    2  10    (3+3j)   3 
      20    (4+4j)   4 
Got: 
    New Data Structure Pressures and temperatures: 
        Pressure (Pa) Temperature 
    x-axis y-axis        
    1  10    (1+1j)   1 
      20    (2+2j)   2 
    2  10    (3+3j)   3 
      20    (4+4j)   4 
+0

'ponieważ przestrzenie są usuwane o zapisywaniu scenariusza. Co? –

+0

@MadPhysicist Poprawiłem moje pytanie. – bluprince13

+0

czy to twój własny kod, który tworzy stół? Jeśli tak, to pomiń końcowe spacje na wyjściu. –

Odpowiedz

10

znalazłem rozwiązanie, używając normalize white space flag

umieścić go zarówno w doctest jak

>>> print new_data_variable # doctest: +NORMALIZE_WHITESPACE 

lub podczas wywoływania doctest

doctest.testmod(optionflags= doctest.NORMALIZE_WHITESPACE)