ECE366 - Lesson 11
Software Engineering Ethics and More Testing
Instructor: Professor Hong
## Software Engineering Ethics
## Software Engineering Ethics
[https://ethics.acm.org/code-of-ethics/software-engineering-code/](https://ethics.acm.org/code-of-ethics/software-engineering-code/)
## Final Project Requirement
- Take 10 items from the software engineering ethics and describe how you followed them in your project
- 2.5 points / 25 points
## WebserviceController.java
```java
package ece366.rpsjdbc.webservice;
import ece366.rpsjdbc.DatabaseConnectionManager;
import ece366.rpsjdbc.Player;
import ece366.rpsjdbc.PlayerDAO;
import org.springframework.web.bind.annotation.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@CrossOrigin
@RestController
@RequestMapping("/api")
public class WebserviceController {
private final PlayerDAO playerDAO;
private final boolean isTestMode;
// Constructor for dependency injection (used in tests)
public WebserviceController(PlayerDAO playerDAO) {
this.playerDAO = playerDAO;
this.isTestMode = true; // Indicates that this is a test instance
}
// Default constructor (used in production)
public WebserviceController() {
this.isTestMode = false;
this.playerDAO = null; // Will be initialized dynamically in production
}
@GetMapping("/testPlayer")
public String getTestPlayer() {
return "TEST PLAYER";
}
@GetMapping("/player/{id}")
public Player getPlayerById(@PathVariable Long id) {
System.out.println("getPlayerById: " + id);
try {
// Use injected PlayerDAO in test mode, otherwise create it dynamically
PlayerDAO dao = isTestMode ? playerDAO : createPlayerDAO();
Player player = dao.findById(id);
System.out.println(player.toString());
return player;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
// Factory method to create PlayerDAO in production
private PlayerDAO createPlayerDAO() throws SQLException {
DatabaseConnectionManager dcm = new DatabaseConnectionManager("db", "rps", "postgres", "password");
Connection connection = dcm.getConnection();
return new PlayerDAO(connection);
}
}
```
## WebserviceControllerTest .java
```java
package ece366.rpsjdbc.webservice;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
import ece366.rpsjdbc.Player;
import ece366.rpsjdbc.PlayerDAO;
@ExtendWith(MockitoExtension.class)
public class WebserviceControllerTest {
@Mock
private PlayerDAO playerDAO; // Mock the PlayerDAO
private WebserviceController wc; // WebserviceController instance
@BeforeEach
public void setup() {
// Manually inject the mock PlayerDAO into WebserviceController
wc = new WebserviceController(playerDAO);
}
@Test
void getTestPlayer() {
assertEquals("TEST PLAYER", wc.getTestPlayer());
}
@Test
public void getPlayerByIdTest() {
// Create a mock Player object
Player mockPlayer = new Player();
mockPlayer.setPlayerId(1L);
mockPlayer.setUserName("TestUser");
mockPlayer.setTotalWins(600);
// Mock the behavior of PlayerDAO's findById method
when(playerDAO.findById(1L)).thenReturn(mockPlayer);
// Call the method under test
Player p = wc.getPlayerById(1L);
// Verify the result
assertEquals(600, p.getTotalWins());
assertEquals("TestUser", p.getUserName());
assertEquals(1L, p.getPlayerId());
}
}
```