Xcode 7 次测试未 运行 但报告成功
Xcode 7 Tests don't run but reports success
我正在尝试向我的项目添加一个测试目标,但是当我 运行 测试时,似乎没有执行实际测试,而是 Xcode 总是报告成功,但是指示测试是否通过的小方块仍然清晰。
我只有一个测试目标和一个class:
@implementation Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
XCTAssert(false, "");
}
- (void)testPerformanceExample {
XCTAssert(false, "");
}
@end
测试应该会失败,但会显示一个提示成功的弹出窗口。另外,测试报告说没有测试。
如果我尝试 运行 单独测试 "succeed" 但我没有得到有关报告的任何信息并且方块仍然是空的。
有什么解决办法吗?
如果您正在为 iOS 构建,您通常会在物理设备上将 Xcode 设置为 运行 吗?如果是这样,请尝试在 iOS 模拟器上将其设置为 运行。
我发现如果您在物理设备上将 Xcode 7 设置为 7,则单元测试的行为将与您描述的完全一致。在 iOS 模拟器上临时将 Xcode 设置为 运行 以进行单元测试解决了这个问题,现在它就像一个魅力。
我希望这可以帮助 运行遇到同样问题的任何人。 :D
关闭 iOS 设备,然后重新打开。您可能还需要拔下 USB 电缆并重新连接,以便 Xcode 可以重新建立与设备的通信。当这发生在我身上时,测试会立即报告测试成功,而测试永远不会 运行。我还注意到,当我尝试记录一个新的 UI 测试操作时,Xcode 每次都会崩溃 - 类似于我第一次启用 iOS 之前它的行为方式设置 - 开发人员 - 启用 UI 自动化设置,我记得当启用此功能时需要 iOS 设备重启,所以我尝试 iOS 设备重启并且 Xcode 再次开始运行,我可以记录和 运行 在我的 iOS 设备上测试成功。完全披露:在我重新启动 iOS 设备之前,我还打开和关闭启用 UI 自动化,但我怀疑是否需要这样做。 -rh
如果这是为了 UI 自动化测试,那么可能是因为您没有初始化应用程序并启动它。
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
我遇到了同样的问题,清理构建文件夹即可解决。但是,还有一种更快的方法是 Product -> Perform Action -> Test Without Building
检查控制台 (Command-Shift-Y)。
在我的例子中,打印的输出表明为什么测试不是 运行。 (动态框架的飞行前检查失败。)但是我没有看到它,因为调试区域被折叠了。
另外,在我的情况下,问题已通过将 $(PROJECT_DIR)/Carthage/Build/iOS
添加到我的运行时搜索路径来解决,如 here
所述
对于遇到此问题的任何其他人,请检查以确保您的测试 class 继承自 XCTestCase 而不是 XCTest。我疯狂地尝试所有这些解决方案,直到我意识到我是从错误的 class 继承的。 Xcode 不会抱怨,它只会说没有 运行 测试成功。希望这对某人有帮助。
值得一提的是 Xcode 仅运行以 'test' 开头的 XCTestCase 函数。这与其他平台相反,当我开始使用 Xcode.
进行测试时,这让我感到困惑
这样做的原因是您可以在测试 class 内部使用一些方便有用的方法,您不一定想将其称为测试本身。
在下面的测试中class:
class MyBigTest: XCTestCase {
func testSensibleInputReturnSensibleAnswer() {
XCTAssert(/* stuff */)
}
func setupSomeKindOfData() {
// does some data setup here
}
}
只有 testSensibleInputReturnSensibleAnswer()
会被测试套件调用。 setupSomeKindOfData()
函数可能有一些共享的设置逻辑,许多测试函数将调用这些逻辑。
此外,有些人喜欢用 _
格式化他们的测试方法名称,以使其更具可读性。例如:test_sensibleAnswer_sensibleResult()
.
老问题,但在我的案例中解决它的事情已经在这里提到了:
您不能(总是?)重命名测试 classes / cases。创建一个新的 class / case 并丢弃旧的。
FWIW 我在使用 KIF beforeAll
时也遇到了非常相似的问题。有时 beforeAll
中的代码无法正常工作,但测试仍然会 return 成功。
它有时也会使 Xcode 崩溃。请参阅 KIF Github 页面 here。尽管有些人指出问题可能不是因为 KIF,而是因为 XCTest 本身
临时解决方案是避免使用 beforeAll
而是使用 beforeEach
我将测试方法标记为 private
,为我解决的只是删除 private
访问修饰符。
创建时我运行遇到这种情况Objective-C
测试class与现有Swift
同名class。
只需重命名一个测试文件
我正在尝试向我的项目添加一个测试目标,但是当我 运行 测试时,似乎没有执行实际测试,而是 Xcode 总是报告成功,但是指示测试是否通过的小方块仍然清晰。
我只有一个测试目标和一个class:
@implementation Tests
- (void)setUp {
[super setUp];
// Put setup code here. This method is called before the invocation of each test method in the class.
}
- (void)tearDown {
// Put teardown code here. This method is called after the invocation of each test method in the class.
[super tearDown];
}
- (void)testExample {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct results.
XCTAssert(false, "");
}
- (void)testPerformanceExample {
XCTAssert(false, "");
}
@end
测试应该会失败,但会显示一个提示成功的弹出窗口。另外,测试报告说没有测试。
如果我尝试 运行 单独测试 "succeed" 但我没有得到有关报告的任何信息并且方块仍然是空的。
有什么解决办法吗?
如果您正在为 iOS 构建,您通常会在物理设备上将 Xcode 设置为 运行 吗?如果是这样,请尝试在 iOS 模拟器上将其设置为 运行。
我发现如果您在物理设备上将 Xcode 7 设置为 7,则单元测试的行为将与您描述的完全一致。在 iOS 模拟器上临时将 Xcode 设置为 运行 以进行单元测试解决了这个问题,现在它就像一个魅力。
我希望这可以帮助 运行遇到同样问题的任何人。 :D
关闭 iOS 设备,然后重新打开。您可能还需要拔下 USB 电缆并重新连接,以便 Xcode 可以重新建立与设备的通信。当这发生在我身上时,测试会立即报告测试成功,而测试永远不会 运行。我还注意到,当我尝试记录一个新的 UI 测试操作时,Xcode 每次都会崩溃 - 类似于我第一次启用 iOS 之前它的行为方式设置 - 开发人员 - 启用 UI 自动化设置,我记得当启用此功能时需要 iOS 设备重启,所以我尝试 iOS 设备重启并且 Xcode 再次开始运行,我可以记录和 运行 在我的 iOS 设备上测试成功。完全披露:在我重新启动 iOS 设备之前,我还打开和关闭启用 UI 自动化,但我怀疑是否需要这样做。 -rh
如果这是为了 UI 自动化测试,那么可能是因为您没有初始化应用程序并启动它。
XCUIApplication *app = [[XCUIApplication alloc] init];
[app launch];
我遇到了同样的问题,清理构建文件夹即可解决。但是,还有一种更快的方法是 Product -> Perform Action -> Test Without Building
检查控制台 (Command-Shift-Y)。
在我的例子中,打印的输出表明为什么测试不是 运行。 (动态框架的飞行前检查失败。)但是我没有看到它,因为调试区域被折叠了。
另外,在我的情况下,问题已通过将 $(PROJECT_DIR)/Carthage/Build/iOS
添加到我的运行时搜索路径来解决,如 here
对于遇到此问题的任何其他人,请检查以确保您的测试 class 继承自 XCTestCase 而不是 XCTest。我疯狂地尝试所有这些解决方案,直到我意识到我是从错误的 class 继承的。 Xcode 不会抱怨,它只会说没有 运行 测试成功。希望这对某人有帮助。
值得一提的是 Xcode 仅运行以 'test' 开头的 XCTestCase 函数。这与其他平台相反,当我开始使用 Xcode.
进行测试时,这让我感到困惑这样做的原因是您可以在测试 class 内部使用一些方便有用的方法,您不一定想将其称为测试本身。
在下面的测试中class:
class MyBigTest: XCTestCase {
func testSensibleInputReturnSensibleAnswer() {
XCTAssert(/* stuff */)
}
func setupSomeKindOfData() {
// does some data setup here
}
}
只有 testSensibleInputReturnSensibleAnswer()
会被测试套件调用。 setupSomeKindOfData()
函数可能有一些共享的设置逻辑,许多测试函数将调用这些逻辑。
此外,有些人喜欢用 _
格式化他们的测试方法名称,以使其更具可读性。例如:test_sensibleAnswer_sensibleResult()
.
老问题,但在我的案例中解决它的事情已经在这里提到了:
您不能(总是?)重命名测试 classes / cases。创建一个新的 class / case 并丢弃旧的。
FWIW 我在使用 KIF beforeAll
时也遇到了非常相似的问题。有时 beforeAll
中的代码无法正常工作,但测试仍然会 return 成功。
它有时也会使 Xcode 崩溃。请参阅 KIF Github 页面 here。尽管有些人指出问题可能不是因为 KIF,而是因为 XCTest 本身
临时解决方案是避免使用 beforeAll
而是使用 beforeEach
我将测试方法标记为 private
,为我解决的只是删除 private
访问修饰符。
创建时我运行遇到这种情况Objective-C
测试class与现有Swift
同名class。
只需重命名一个测试文件