ECE366 - Lesson 11

Software Engineering Ethics and More Testing

Instructor: Professor Hong

Review & Questions

## 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
## More Testing
## 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()); } } ```