Nexus Unit Testing - Automation Testing User Interface for Roblox Studio


About a year ago, I teased a user interface for a Unit Testing plugin. For many reasons, that version of the plugin was never released. After releasing Nexus Plugin Framework, I started work on a new Unit Testing plugin to release a fully polished Unit Testing plugin for Roblox development.

Why Unit Test
Most developers on the Roblox platform use manual testing for developing systems. While this works for most games, manual testing is a long and fault-prone activity that still leads to major bugs reaching players. Unit testing provides a fast and consistent way to test the logic of games, plugins, and subsystems for cases that could come up in production, both as common cases and edge cases.

How to Write Unit Tests
Writing unit tests for Nexus Unit Testing and TestEZ is described in the docs for both projects:

For the broader topic of “how to write unit tests”, this thread does not cover practices for creating unit tests. At a super high level, you should focus on:

  • “Edge coverage”: Test cases that hit specific logic (ex: the if and else conditions are ran).
  • “Branch coverage”: Test cases that reach logic (ex: all cases that determines how an if statement is evaluated is ran)
  • “Path coverage”: Test cases that cover all possible branches through all possible edges.

Major Features of the Plugin

Pricing
The reason this is in Cool Creations instead of Community Resources is because the plugin is not free right now. The plugin is currently 500 Robux ($6.25 based on buying Robux, $1.75 based on DevEx) to offset the time investment for creating the plugin. After 1 month without a significant update, the plugin will be made free (currently March 26th). For those who don’t want to pay, the plugin can be imported into Roblox Studio using Rojo using the GitHub repository.

Update: This plugin has been made free.

Plugin Limitations
The current design does have some limitations that should be known going in. For bugs, see the README in the GitHub repository.

  • When rerunning test cases, the ModuleScript is rerun with all tests. This may change in the future since it doesn’t require that much in terms of changes.
  • When running TestEZ, all test cases are reported after running the tests. Allowing them to appear as they were running would require re-implementing TestEZ and would make updates harder to perform.
  • While displaying a long output is efficient, displaying a lot of tests is not. This may be implemented at a future time into Nexus Plugin Framework, but it would be a big feature to implement.
  • Some tests require a running session. Running tests does not automatically do it and you should skip the test if a running game is not detected.
  • If you require a ModuleScript once outside of a test case using Nexus Unit Testing (not TestEZ), the output will appear in the root test instead of the test case that is calling methods. This is because the environment is determined when requiring. To get around this, you should require the module in each test if using Nexus Unit Testing. TestEZ does not have a workaround since the test cases are just displayed after running rather than capturing the output.
43 Likes

This looks great, purchased instantly! I will definitely be using this for my project. Great plugin with amazing documentation.

1 month has passed since the release and no significant changes have been made, so the plugin is now free. I did have a few people say that running all tests with a large game takes too much time since it creates a list frame for each test, but it will be months before I address that.

3 Likes

I think the plugin is broken? I keep getting these errors (like 5000 of them actually) and it causes Studio to freeze up for a good while. I’m not even sure where it’s getting IsNotOccluded because it doesn’t appear anywhere in any script.

The plugin itself is still functional. This popped up a few weeks ago and is due to a design flaw in the plugin framework. I currently am allocating my time to other projects so I can’t deliver a fix soon.