
Non-static method 'age()' cannot be referenced from a static context
Publicado por Xavi (21 intervenciones) el 12/10/2021 18:43:36
Hola,
Soy nuevo en Java. Estoy intentando diseñar un test para un método que he implementado llamado age() que calcula la edad de un atleta en base al parámetro "birthYear" de tipo entero (int). La clase ha sido diseñada de la siguiente manera:
No he incluido todos los setters y getters, sinó únicamente el de birthYear. He diseñado el siguiente test:
Sin embargo, el test no funciona adecuadamente y se muestra como INVALIDO debido a lo siguiente:
A qué se refiere? Cómo podría solucionarlo?
Soy nuevo en Java. Estoy intentando diseñar un test para un método que he implementado llamado age() que calcula la edad de un atleta en base al parámetro "birthYear" de tipo entero (int). La clase ha sido diseñada de la siguiente manera:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import java.time.LocalDate;
public class Athlete {
// Inicialización de los atributos por defecto
private int id;
private static int nextId=0;
private String name;
private String surname;
private int birthYear;
private boolean medalist;
private char gender;
private String nationality;
public Athlete() {
this("lorem", "ipsum",1982,false,'m',"SPA");
}
public Athlete(String name, String surname, int birthYear, boolean medalist, char gender, String nationality) {
setName(name);
setSurname(surname);
setBirthYear(birthYear);
setMedalist(medalist);
setGender(gender);
setNationality(nationality);
setId();
}
// Getter BirthYear
public int getBirthYear(){
return birthYear;
}
// Setter BirthYear
public void setBirthYear (int birthYear){
if (birthYear < 1900 || birthYear > 2010) {
System.out.println("[ERROR] Athlete's birth year must be in range [1900,2010]");
}else{
this.birthYear = birthYear;
}
}
// Método no clasificado como getter ni setter llamado age()
public int age () {
int age;
// Si el año es negativo
if (this.birthYear < 0) {
System.out.println("[ERROR] Athlete's birthYear cannot be a negative number");
return -1;
// Si el año de nacimiento es mayor al año actual
} else if (this.birthYear > LocalDate.now().getYear()) {
System.out.println("[ERROR] Athlete's birthYear cannot be after current year");
return -1;
} else {
age = LocalDate.now().getYear() - this.birthYear;
}
return age;
}
No he incluido todos los setters y getters, sinó únicamente el de birthYear. He diseñado el siguiente test:
1
2
3
4
5
6
7
8
void testAge() {
// Valor esperado es age = 67 ya que 2021 - 1954 = 67
assertEquals(67, Athlete.age(1954));
// Valor esperado es -1 ya que se está pasando una edad negativa
assertEquals(-1, Athlete.age(-1954));
// Valor esperado es -1 ya que se está pasando un año posterior al actual
assertEquals(-1, Athlete.age(2022));
}
Sin embargo, el test no funciona adecuadamente y se muestra como INVALIDO debido a lo siguiente:
1
Non-static method 'age()' cannot be referenced from a static context
A qué se refiere? Cómo podría solucionarlo?
Valora esta pregunta


0