Type: | Package |
Title: | Mutation Testing |
Version: | 0.1.0 |
Description: | Measure quality of your tests. 'muttest' introduces small changes (mutations) to your code and runs your tests to check if they catch the changes. If they do, your tests are good. If not, your assertions are not specific enough. 'muttest' gives you percent score of how often your tests catch the changes. |
License: | MIT + file LICENSE |
Encoding: | UTF-8 |
RoxygenNote: | 7.3.2 |
Depends: | R (≥ 4.1.0) |
Imports: | checkmate, cli, dplyr, fs, purrr, R6, rlang, testthat, tibble, treesitter, treesitter.r, withr |
Config/testthat/edition: | 3 |
URL: | https://jakubsob.github.io/muttest/ |
Suggests: | box, covr, cucumber (≥ 2.1.0), ggplot2, shiny |
Config/Needs/website: | rmarkdown |
NeedsCompilation: | no |
Packaged: | 2025-05-28 17:46:29 UTC; jakub |
Author: | Jakub Sobolewski [aut, cre] |
Maintainer: | Jakub Sobolewski <jakupsob@gmail.com> |
Repository: | CRAN |
Date/Publication: | 2025-05-30 09:40:05 UTC |
CopyStrategy interface
Description
Extend this class to implement a custom copy strategy.
Methods
Public methods
Method execute()
Copy project files according to the strategy
Usage
CopyStrategy$execute(original_dir)
Arguments
original_dir
The original directory to copy from
plan
The current test plan
Returns
The path to the temporary directory
Method clone()
The objects of this class are cloneable with this method.
Usage
CopyStrategy$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other CopyStrategy:
PackageCopyStrategy
,
default_copy_strategy()
Run tests matching the mutated source file name
Description
This strategy tells if a mutant is caught by a test matching the source file name.
For example, if the source file name is foo.R
, and there are test files named test-foo.R
or test-bar.R
,
only test-foo.R
will be run.
This strategy should give faster results than ?FullTestStrategy
, especially for big codebases,
but the score might be less accurate.
Super class
muttest::TestStrategy
-> FileTestStrategy
Methods
Public methods
Method new()
Initialize the FileTestStrategy
Usage
FileTestStrategy$new( load_helpers = TRUE, load_package = c("source", "none", "installed") )
Arguments
load_helpers
Whether to load test helpers
load_package
The package loading strategy
Method execute()
Execute the test strategy
Usage
FileTestStrategy$execute(path, plan, reporter)
Arguments
path
The path to the test directory
plan
The current mutation plan. See
plan()
.reporter
The reporter to use for test results
Returns
The test results
Method clone()
The objects of this class are cloneable with this method.
Usage
FileTestStrategy$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other TestStrategy:
FullTestStrategy
,
TestStrategy
,
default_test_strategy()
Run all tests for a mutant
Description
This test strategy tells if a mutant is caught by any test.
To get faster results, especially for big codebases, use ?FileTestStrategy
instead.
Super class
muttest::TestStrategy
-> FullTestStrategy
Methods
Public methods
Method new()
Initialize
Usage
FullTestStrategy$new( load_helpers = TRUE, load_package = c("source", "none", "installed") )
Arguments
load_helpers
Whether to load test helpers
load_package
The package loading strategy
Method execute()
Execute the test strategy
Usage
FullTestStrategy$execute(path, plan, reporter)
Arguments
path
The path to the test directory
plan
The current mutation plan. See
plan()
.reporter
The reporter to use for test results
Returns
The test results
Method clone()
The objects of this class are cloneable with this method.
Usage
FullTestStrategy$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other TestStrategy:
FileTestStrategy
,
TestStrategy
,
default_test_strategy()
Reporter for Mutation Testing
Description
The job of a mutation reporter is to aggregate and display the results of mutation tests. It tracks each mutation attempt, reporting on whether the tests killed the mutation or the mutation survived.
Public fields
test_reporter
Reporter to use for the testthat::test_dir function
out
Output destination for reporter messages
width
Width of the console in characters
unicode
Whether Unicode output is supported
crayon
Whether colored output is supported
rstudio
Whether running in RStudio
hyperlinks
Whether terminal hyperlinks are supported
current_file
Path of the file currently being mutated
current_mutator
Mutator currently being applied
plan
Complete mutation plan for the test run
results
List of mutation test results, indexed by file path
current_score
Current score of the mutation tests
Methods
Public methods
Method new()
Initialize a new reporter
Usage
MutationReporter$new(test_reporter = "silent", file = stdout())
Arguments
test_reporter
Reporter to use for the testthat::test_dir function
file
Output destination (default: stdout)
Method start_reporter()
Start reporter
Usage
MutationReporter$start_reporter(plan = NULL)
Arguments
plan
The complete mutation plan
temp_dir
Path to the temporary directory for testing
Method start_file()
Start testing a file
Usage
MutationReporter$start_file(filename)
Arguments
filename
Path to the file being mutated
Method start_mutator()
Start testing with a specific mutator
Usage
MutationReporter$start_mutator(mutator)
Arguments
mutator
The mutator being applied
Method add_result()
Add a mutation test result
Usage
MutationReporter$add_result(plan, killed, survived, errors)
Arguments
plan
Current testing plan. See
plan()
.killed
Whether the mutation was killed by tests
survived
Number of survived mutations
errors
Number of errors encountered
Method end_mutator()
End testing with current mutator
Usage
MutationReporter$end_mutator()
Method end_file()
End testing current file
Usage
MutationReporter$end_file()
Method end_reporter()
End reporter and show summary
Usage
MutationReporter$end_reporter()
Method get_score()
Get the current score
Usage
MutationReporter$get_score()
Method cat_tight()
Print a message to the output
Usage
MutationReporter$cat_tight(...)
Arguments
...
Message to print
Method cat_line()
Print a message to the output
Usage
MutationReporter$cat_line(...)
Arguments
...
Message to print
Method rule()
Print a message to the output with a rule
Usage
MutationReporter$rule(...)
Arguments
...
Message to print
Method clone()
The objects of this class are cloneable with this method.
Usage
MutationReporter$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other MutationReporter:
ProgressMutationReporter
,
default_reporter()
Package copy strategy
Description
It copies all files and directories from the original directory to a temporary directory.
Super class
muttest::CopyStrategy
-> PackageCopyStrategy
Methods
Public methods
Method execute()
Copy project files, excluding hidden and temp directories
Usage
PackageCopyStrategy$execute(original_dir, plan)
Arguments
original_dir
The original directory to copy from
plan
The current test plan
Returns
The path to the temporary directory
Method clone()
The objects of this class are cloneable with this method.
Usage
PackageCopyStrategy$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other CopyStrategy:
CopyStrategy
,
default_copy_strategy()
Progress Reporter for Mutation Testing
Description
A reporter that displays a progress indicator for mutation tests. It provides real-time feedback on which mutants are being tested and whether they were killed by tests.
Super class
muttest::MutationReporter
-> ProgressMutationReporter
Public fields
start_time
Time when testing started (for duration calculation)
min_time
Minimum test duration to display timing information
col_config
List of column configuration for report formatting
Methods
Public methods
Inherited methods
Method format_column()
Format a column with specified padding and width
Usage
ProgressMutationReporter$format_column(text, col_name, colorize = NULL)
Arguments
text
Text to format
col_name
Column name to use configuration from
colorize
Optional function to color the text
Method fmt_h()
Format the header of the report
Usage
ProgressMutationReporter$fmt_h()
Method fmt_r()
Format a row of the report
Usage
ProgressMutationReporter$fmt_r(status, k, s, e, t, score, mutator, file)
Arguments
status
Status symbol (e.g., tick or cross)
k
Number of killed mutations
s
Number of survived mutations
e
Number of errors
t
Total number of mutations
score
Score percentage
mutator
The mutator used
file
The file being tested
Returns
Formatted row string
Method new()
Initialize a new progress reporter
Usage
ProgressMutationReporter$new( test_reporter = "silent", min_time = 1, file = stdout() )
Arguments
test_reporter
Reporter to use for testthat::test_dir
min_time
Minimum time to show elapsed time (default: 1s)
file
Output destination (default: stdout)
Method start_reporter()
Start reporter
Usage
ProgressMutationReporter$start_reporter(plan = NULL)
Arguments
plan
The complete mutation plan
Method add_result()
Add a mutation test result
Usage
ProgressMutationReporter$add_result(plan, killed, survived, errors)
Arguments
plan
Current testing plan. See
plan()
.killed
Whether the mutation was killed by tests
survived
Number of survived mutations
errors
Number of errors encountered
Method update()
Update status spinner (for long-running operations)
Usage
ProgressMutationReporter$update(force = FALSE)
Arguments
force
Force update even if interval hasn't elapsed
Method end_file()
End testing current file
Usage
ProgressMutationReporter$end_file()
Method cr()
Carriage return if dynamic, newline otherwise
Usage
ProgressMutationReporter$cr()
Method end_reporter()
End reporter with detailed summary
Usage
ProgressMutationReporter$end_reporter()
Method clone()
The objects of this class are cloneable with this method.
Usage
ProgressMutationReporter$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other MutationReporter:
MutationReporter
,
default_reporter()
TestStrategy interface
Description
Extend this class to implement a custom test strategy.
Methods
Public methods
Method execute()
Execute the test strategy
Usage
TestStrategy$execute(path, plan, reporter)
Arguments
path
The path to the test directory
plan
The current mutation plan. See
plan()
.reporter
The reporter to use for test results
Returns
The test result
Method clone()
The objects of this class are cloneable with this method.
Usage
TestStrategy$clone(deep = FALSE)
Arguments
deep
Whether to make a deep clone.
See Also
Other TestStrategy:
FileTestStrategy
,
FullTestStrategy
,
default_test_strategy()
Create a default project copy strategy
Description
Create a default project copy strategy
Usage
default_copy_strategy(...)
Arguments
... |
Arguments passed to the |
Value
A ?CopyStrategy
object
See Also
Other CopyStrategy:
CopyStrategy
,
PackageCopyStrategy
Create a default reporter
Description
Create a default reporter
Usage
default_reporter(...)
Arguments
... |
Arguments passed to the |
See Also
Other MutationReporter:
MutationReporter
,
ProgressMutationReporter
Create a default run strategy
Description
Create a default run strategy
Usage
default_test_strategy(...)
Arguments
... |
Arguments passed to the |
Value
A ?TestStrategy
object
See Also
Other TestStrategy:
FileTestStrategy
,
FullTestStrategy
,
TestStrategy
Run a mutation test
Description
Run a mutation test
Usage
muttest(
plan,
path = "tests/testthat",
reporter = default_reporter(),
test_strategy = default_test_strategy(),
copy_strategy = default_copy_strategy()
)
Arguments
plan |
A data frame with the test plan. See |
path |
Path to the test directory. |
reporter |
Reporter to use for mutation testing results. See |
test_strategy |
Strategy for running tests. See |
copy_strategy |
Strategy for copying the project. See |
Value
A numeric value representing the mutation score.
Mutate an operator
Description
It changes a binary operator to another one.
Usage
operator(from, to)
Arguments
from |
The operator to be replaced. |
to |
The operator to replace with. |
Examples
operator("==", "!=")
operator(">", "<")
operator("<", ">")
operator("+", "-")
Create a plan for mutation testing
Description
Each mutant requires rerunning the tests. For large project it might be not feasible to test all mutants in one go. This function allows you to create a plan for selected source files and mutators.
Usage
plan(mutators, source_files = fs::dir_ls("R", regexp = ".[rR]$"))
Arguments
mutators |
A list of mutators to use. See |
source_files |
A vector of file paths to the source files. |
Details
The plan is in a data frame format, where each row represents a mutant.
You can subset the plan before passing it to the muttest()
function.
Value
A data frame with the test plan. The data frame has the following columns:
-
filename
: The name of the source file. -
original_code
: The original code of the source file. -
mutated_code
: The mutated code of the source file. -
mutator
: The mutator that was applied.