I wrote a bunch of unit tests that utilized the TestCaseAttribute. These tests run great on my local machine when I use the ReSharper unit test runner. Unfortunately, when I run the tests through Visual Studio with the NUnit VS Adapter 2.0.0.0 I get the following output:
------ Run test started ------
NUnit VS Adapter 2.0.0.0 executing tests is started
Loading tests from D:\Projects\Ever\WebApp\Ever.UnitTests\bin\Debug\Ever.UnitTests.dll
Exception System.Reflection.AmbiguousMatchException,
Exception thrown executing tests in
D:\Projects\Ever\WebApp\Ever.UnitTests\bin\Debug\Ever.UnitTests.dll
NUnit VS Adapter 2.0.0.0 executing tests is finished
========== Run test finished: 0 run (0:00:00.8290488) ==========
We use the Visual Studio Online hosted build server for our build, and that relies on the test adapter to run our NUnit unit tests. This means I need to figure out a way to make this work with the attribute (much preferred) or I have to work around this limitation.
Do I have to abandon the use of the TestCaseAttribute because MSTest doesn't support parameterized tests1,2?
After further debuging and testing I've concluded that the TestCaseAttribute isn't the cause of the issue. I'm answering my own question instead of deleting1 in case anyone else falls into the same trap that I did.
The TestCaseAttribute works properly as you can see with the following tests. These tests run perfectly well via the VS Test Adapter and the ReSharper test runner.
[TestFixture]
public class SimpleReproAttempt
{
[Test]
[TestCase(true, false)]
[TestCase(false, true)]
public void DoesNotReproduceIssue(bool a, bool b)
{
Assert.IsTrue(a || b);
}
[Test]
[TestCase("", false, true)]
[TestCase(null, true, false)]
public void DoesNotReproduceIssue(string a, bool b, bool c)
{
Assert.IsTrue(b || c);
Assert.IsNullOrEmpty(a);
}
}
The issue seems to be present only in tests that have an overloaded method with at least one of the overloads using async/await.
1: Editing my question based on this information would turn this into a chameleon question, and a chameleon via self answer is discouraged so I dismissed that option as well.
Related
Using Visual Studio 2019 and trying out the MSTest, NUnit and xUnit testing frameworks with C#.
Say I have two methods:
// MSTest
[TestClass]
public class MyTests_MSTest
{
[TestMethod]
public void WantedToRunThisFirst()
{
// Arrange, Act, Assert...
}
[TestMethod]
public void ButThisRunsFirst()
{
// Arrange, Act, Assert...
}
}
Have tried the equivalent tests and syntax in all test frameworks (i.e. MSTest, NUnit and xUnit). Tests are always displayed in the Visual Studio Test Explorer section in alphabetical order (i.e. with ButThisRunsFirst at the top). And when the tests are run, the alphabetic order is used again and ButThisRunsFirst runs before WantedToRunThisFirst.
Tests should be independent so the run order shouldn't really matter, but having the tests listed and run to match the order in the code would be nice.
Is it possible to configure the display and/or run order of unit test methods?
why are thread names different when I start a Robolectric test from Android Studio vs. the Gradle build?
e.g. consider this simple test:
#RunWith(RobolectricTestRunner.class)
public class RobolectricRxThreadTest {
#Test
public void testMainThreadName() {
assertEquals("main", Thread.currentThread().getName());
}
}
when I start this test
directly in Android Studio (by pressing CTRL+SHIFT+F10) the test is okay
but when I start the gradle tests (e.g. from the Gradle projects view: :app - Tasks - verification - test, or from the Terminal view: ./gradlew test) it fails.
The thread name is Thread worker and not main as expected.
I just reproduced the issue, but I wonder why do you need this test?
If you really want to check main thread then the correct way would be:
assertThat(Thread.currentThread()).isEqualTo(Looper.getMainLooper().getThread());
And this test pass from AS and console both runs.
On a separate perforce stream from the rest of my team, I can't run CppUnitTestFramework tests on a project, while the rest of the streams run the tests just fine.
Here's a code snippet:
TEST_CLASS(MyClass)
{
BEGIN_TEST_CLASS_ATTRIBUTE()
TEST_CLASS_ATTRIBUTE(L"Type", L"Native C++ Unit Tests")
TEST_CLASS_ATTRIBUTE(L"TestClass", L"MyClass")
END_TEST_CLASS_ATTRIBUTE()
public:
TEST_METHOD(canFooTheBar)
{
...
Assert::IsTrue(foo());
}
...
}
Here is the error I get when trying to run a test:
------ Discover test started ------
Object reference not set to an instance of an object.
========== Discover test finished: 0 found (0:00:00.5129487) ==========
No tests found to run.
There are no diffs between the .sln, or any of the relevant .vcxproj files between the different streams.
A possible reason is that you have a test class that has no tests (in the same project).
Removing such class may solve the problem.
The problem is reproduced if I add the following class to the project:
TEST_CLASS(MyEmptyClass)
{
BEGIN_TEST_CLASS_ATTRIBUTE()
TEST_CLASS_ATTRIBUTE(L"Type", L"Native C++ Unit Tests")
TEST_CLASS_ATTRIBUTE(L"TestClass", L"MyEmptyClass")
END_TEST_CLASS_ATTRIBUTE()
public:
//no tests
}
How do I run tests which will test my nemerle code. So for example, I've a Calculator class and a CalculatorTests class in a nemerle project. I have already added a reference to nunit using package manager ("install-package nunit"). Now NUnit is available in nemerle project.
After writing following code
[TestFixture]
class CalculatorTests
{
[Test]
MyTest() : void
{
def result = Calculator().Add( 1 );
Assert.AreEqual( 2, result );
}
}
I tried to use TestDriven.net visual studio add-in to run the test but couldn't able to. Can someone tell me how to run tests in nemerle or do i have to write code to run all tests when executing a console app?
Maybe it caused by NUnit runs under .Net 2.0 runtime. Try to set a runtime version in the NUnit command line.
I am running some Junit tests and Netbeans behaves strangely giving the report in "Output" window:
Testcase: warning(junit.framework.TestSuite$1): FAILED
No tests found in uk.ac.cam.ch.wwmm.chemicaltagger.ChemistryPOSTaggerTest
junit.framework.AssertionFailedError: No tests found in uk.ac.cam.ch.wwmm.chemicaltagger.ChemistryPOSTaggerTest
Test uk.ac.cam.ch.wwmm.chemicaltagger.ChemistryPOSTaggerTest FAILED (crashed)
test:
BUILD SUCCESSFUL (total time: 12 seconds)
The (5) tests are there. I have run mvn test which runs them but fails on OutOfMemoryError. Is this likely to be the cause of the Netbeans problem?
How did you created your test file? Manually, or using NB wizard? (Tools - Create JUnit test from Java file's popup menu)
If you are using JUnit 3, all test methods in your test file must start with "test", e.g.
public void testFoo() { //some testing here :) }
With JUnit 4, a '#Test' annotation is required, e.g.
#Test
public void myOwnTestFoo() { //...}
Otherwise JUnit does not recognize the test and throws AssertionFailedError error.