I am sitting in front of this problem for the last 2 hours and can't figure out what the problem is. I have a function which calculates something based on csv input. When I print the "spalte_ideal_sammlung" out of the function it returns the correct array: ['y36', 'y11', 'y2', 'y33'] but when I try to call these functions via my unittest I get this array as a return from the function: ['y36', 'y11', 'y2', 'y33', 'y36', 'y11', 'y2', 'y33']. Any idea why I get this return instead of the correct one with 4 strings inside? The variable spalte_ideal_sammlung has been defined as global in my main function in the main.py.
def main(): # Mittels unsere Main-Funktion rufen wir die definierte Funktion auf
global spalte_ideal_sammlung #Abspeichern unserer gefundenen idealen Spalten
spalte_ideal_sammlung = []
My function in my main.py:
class LeastSquare(Berechnung): # Klasse LeastSquare erbt von Berechnung
# Überschreibe die Methode least_square_berechnung aus der Basisklasse Berechnung
def least_square_berechnung(self):
#pass
# Initialisiere eine Liste, die später die LS-Werte für die Idealen-Funktionen enthält
ls_ideal = []
# Initialisiere eine Liste, welche die Spaltenbezeichnung für die Y-Werte der Trainingsdaten enthält. Die erste Spalte enthält die x-Werte.
trainingsdaten = ["y1", "y2", "y3", "y4"]
# Wir starten ab der zweiten Spalte, weil ab hier die y werte liegen. Erste Spalte sind die X-Werte
for columns_train in training.columns[1:]:
mse = 9999
# Durchlaufe alle Spalten der Idealen-Funktionen
for columns_ideal in ideal.columns[1:]:
#Berechnung MSE
mse_zw = (mean_squared_error(training[columns_train], ideal[columns_ideal]))
if mse_zw < mse:
mse = mse_zw
spalte_ideal = ideal[columns_ideal].name
# Gefundene Werte werden ans Array übergeben.
# Da der MeanSquaredError nicht dem verlangten SquaredError entspricht, überführen wir diesen durch den Faktor 400 in Wert der gesuchten Abweichung.
ls_ideal.append(mse * len(ideal))
spalte_ideal_sammlung.append(spalte_ideal)
for i, y, k in zip(ls_ideal, spalte_ideal_sammlung, trainingsdaten):
print("Für den Trainingsdatensatz " + str(k) + " lautet der LeastSquare " + str(
i) + " die Ideale Funktion lautet " + str(y))
return spalte_ideal_sammlung
I call the function out of my unittes.py (I did not start with the unit test because the return is not what I expected. Its definitely my fault but I can't find the mistake:
import unittest
import main
class MyTestCase(unittest.TestCase):
def test_something(self):
instanz1 = main.LeastSquare()
print(instanz1.least_square_berechnung())
if __name__ == '__main__':
unittest.main()
Really appreciate any help!
LeastSquaretry passing the instance ofLeastSquareto your unit testself.assertEqual(instanz1.least_square_berechnung(), ['y36', 'y11', 'y2', 'y33'])main.spalte_ideal_sammlung = [] self.assertEqual(instanz1.least_square_berechnung(), ['y36', 'y11', 'y2', 'y33'])