[Eiffel] SmartEiffel und etest

09/09/2010 - 14:17 von Thomas Preymesser | Report spam
Hallo,

ich muß vorausschicken, daß ich noch ziemlicher Anfànger in bezug auf
Eiffel bin.

Ich wollte dann jetzt mit dem Paket 'etest' Tests für meine Klassen
erstellen.
Etest scheint aber mit einer etwas àlteren Version von SmartEiffel
(welches ich verwende) erstellt worden zu sein.
An einigen Stellen mußte ich den Source deshalb etwas anpassen, was
ich hoffentlich korrekt getan habe.
Nachdem ich alles so weit habe, daß ich an die Stelle komme, wo meine
eigentlichen Tests aufgerufen werden sollen,
bekomme ich jetzt noch folgende Fehlermeldung:

****** Fatal Error: Cannot pass `feeds.lower' which is of type
INTEGER_32 into formal type ANY.

The source lines involved by the message are the following:

Line 59 column 50 in ETEST_CASE (c:\Users\thopre\etest-0.9.2\clusters
\etest\etest_case.e):
assert_equal (msg: STRING; expected, actual: ANY) is
^
Line 10 column 32 in TEST_FEEDLIST (c:\Users\thopre\eiffel-test
\test_feedlist.e):
assert_equal ("1", 1, feeds.lower)
^

Error occurs while compiling. Compilation process aborted.
Compile Failed

Feedlist sieht wie folgt aus:

1 -- FEEDLIST ist eine Liste der abonnierten Podcast-Feeds
2
3 class FEEDLIST
4
5 creation {ANY}
6 make
7
8 feature {NONE}
9 fname: STRING
10 list: ARRAY[STRING]
11 number_of_entries: INTEGER
12 current_position: INTEGER
13
14 -- setzt Zeiger auf erste Position
15 feature {ANY}
16 top is
17 do
18 current_position := 1
19 end
20
21 -- TRUE, falls current_position am Ende der Liste steht
22 feature {ANY}
23 bottom : BOOLEAN is
24 do
25 Result := current_position > number_of_entries
26 end
27
28 -- gibt Eintrag an current_position (=aktueller) zurück
29 -- und erhoeht current_position
30 feature {ANY}
31 next : STRING is
32 do
33 Result := list.item(current_position)
34 current_position := current_position + 1
35 end
36
37 -- nur zum rumspielen
38 feature {ANY}
39 feeddatei: STRING is
40 do
41 Result := fname
42 end
43 feature {ANY}
44 first: STRING is
45 do
46 Result := list.item(1)
47 end
48
49
50 -- rumspielen end
51
52 make (filename: STRING) is
53 require
54 filename /= Void
55 filename /= ""
56 do
57 create list.make(1,100)
58 -- ein Array mit Grenzen 1 und 100, richtig?
59 fname := filename
60 end -- make
61
62 -- Feeds einlesen (darf auch mehrfach aufgerufen werden)
63 read is
64 -- TODO: require
65 -- TODO: file_exist: FileExist(fname)
66 local
67 f: TEXT_FILE_READ
68 s: STRING
69 do
70 number_of_entries := 0
71 from
72 create f.connect_to(fname)
73 until
74 f.end_of_input
75 loop
76 f.read_line
77 if f.end_of_input then
78 -- The last line of the file does not end with a new
79 -- line character. Remove this test if you don't care.
80 -- std_output.put_string(f.last_string)
81 else
82 -- std_output.put_line(f.last_string)
83 end
84 -- s := f.last_string
85 create s.copy(f.last_string)
86 if s /= "" and s /= Void and
87 s.is_empty = False then
88 number_of_entries := number_of_entries + 1
89 list.put(s, number_of_entries)
90 end
91 end
92 f.disconnect
93 end
94 -- returns the item at position i in the url list
95 feature {ANY}
96 item (i: INTEGER) : STRING is
97 do
98 Result := list.item(i)
99 end
100 feature {ANY}
101 upper: INTEGER is
102 do
103 Result := number_of_entries
104 end
105
106 lower: INTEGER is
107 do
108 Result := 1
109 end
110
111 end -- class

Ich kapier' nicht, was mir diese Fehlermeldung sagen soll, bzw. wie
ich das Problem lösen kann.

Der Sourcecode zu feedlist ist sicherlich noch nicht der Weisheit
letzter Schluß, ich bin noch dabei,
mit Eiffel ein bißchen herumzuspielen. Hinweise darauf, was ich
eventuell grob falsch oder umstàndlich mache, nehme ich mir gerne zu
Herzen.

Ach ja, gibt es für Eiffel noch andere Wege um automatisierte Tests zu
schreiben? Was ist da der übliche Weg?

-Thomas
 

Lesen sie die antworten

#1 Georg Bauhaus
09/09/2010 - 15:33 | Warnen spam
On 09.09.10 14:17, Thomas Preymesser wrote:

****** Fatal Error: Cannot pass `feeds.lower' which is of type
INTEGER_32 into formal type ANY.

The source lines involved by the message are the following:

Line 59 column 50 in ETEST_CASE (c:\Users\thopre\etest-0.9.2\clusters
\etest\etest_case.e):
assert_equal (msg: STRING; expected, actual: ANY) is



Ich unke mal, dass dieser àltere Eiffel-Dialekt das
Durcheinander sichtbar macht, das im Umfeld von expanded
types (hier auch INTEGER neben INTEGER_*) auftreten
kann, im Zusammenspiel mit ANY-Erwartungen im Funktionsparameter.


Georg

Ähnliche fragen