ScalaTest in sbt: is there a way to run a single test without tags?

后端 未结 5 1729
不知归路
不知归路 2020-12-04 05:46

I know that a single test can be ran by running, in sbt,

testOnly *class -- -n Tag

Is there a way of telling sbt/scalatest to run a single

5条回答
  •  遥遥无期
    2020-12-04 06:14

    Here's the Scalatest page on using the runner and the extended discussion on the -t and -z options.

    This post shows what commands work for a test file that uses FunSpec.

    Here's the test file:

    package com.github.mrpowers.scalatest.example
    
    import org.scalatest.FunSpec
    
    class CardiBSpec extends FunSpec {
    
      describe("realName") {
    
        it("returns her birth name") {
          assert(CardiB.realName() === "Belcalis Almanzar")
        }
    
      }
    
      describe("iLike") {
    
        it("works with a single argument") {
          assert(CardiB.iLike("dollars") === "I like dollars")
        }
    
        it("works with multiple arguments") {
          assert(CardiB.iLike("dollars", "diamonds") === "I like dollars, diamonds")
        }
    
        it("throws an error if an integer argument is supplied") {
          assertThrows[java.lang.IllegalArgumentException]{
            CardiB.iLike()
          }
        }
    
        it("does not compile with integer arguments") {
          assertDoesNotCompile("""CardiB.iLike(1, 2, 3)""")
        }
    
      }
    
    }
    

    This command runs the four tests in the iLike describe block (from the SBT command line):

    testOnly *CardiBSpec -- -z iLike
    

    You can also use quotation marks, so this will also work:

    testOnly *CardiBSpec -- -z "iLike"
    

    This will run a single test:

    testOnly *CardiBSpec -- -z "works with multiple arguments"
    

    This will run the two tests that start with "works with":

    testOnly *CardiBSpec -- -z "works with"
    

    I can't get the -t option to run any tests in the CardiBSpec file. This command doesn't run any tests:

    testOnly *CardiBSpec -- -t "works with multiple arguments"
    

    Looks like the -t option works when tests aren't nested in describe blocks. Let's take a look at another test file:

    class CalculatorSpec extends FunSpec {
      it("adds two numbers") {
        assert(Calculator.addNumbers(3, 4) === 7)
      }
    }
    

    -t can be used to run the single test:

    testOnly *CalculatorSpec -- -t "adds two numbers"
    

    -z can also be used to run the single test:

    testOnly *CalculatorSpec -- -z "adds two numbers"
    

    See this repo if you'd like to run these examples. You can find more info on running tests here.

提交回复
热议问题