diff --git a/test/conftest.py b/test/conftest.py
index 66ee9630ea4ac0a05b446f4dedbfe68549a1191e..64f39843c53a4369781a269fd7fc30ad9aa1d255 100644
--- a/test/conftest.py
+++ b/test/conftest.py
@@ -1,3 +1,4 @@
+from test.fixtures.signal import signal, signals
+from test.fixtures.operation_tree import *
+from test.fixtures.port import *
 import pytest
-from test.fixtures.signal import *
-from test.fixtures.operation_tree import *
\ No newline at end of file
diff --git a/test/fixtures/operation_tree.py b/test/fixtures/operation_tree.py
index 74d3b8c6f34cce87878f82e539c798a8a6dc9b0a..df3fcac35cc495d14bed06ccdfc2a3ebed25616e 100644
--- a/test/fixtures/operation_tree.py
+++ b/test/fixtures/operation_tree.py
@@ -17,11 +17,10 @@ def create_operation(_type, dest_oper, index, **kwargs):
 
 @pytest.fixture
 def operation_tree():
-    """
-    Return a addition operation connected with 2 constants.
-    >---C---+
-            ---A
-    >---C---+
+    """Return a addition operation connected with 2 constants.
+    ---C---+
+           ---A
+    ---C---+
     """
     add_oper = Addition()
     create_operation(Constant, add_oper, 0, value=2)
@@ -30,15 +29,14 @@ def operation_tree():
 
 @pytest.fixture
 def large_operation_tree():
-    """
-    Return a constant operation connected with a large operation tree with 3 other constants and 3 additions.
-    >---C---+
-            ---A---+
-    >---C---+      |
-                   +---A
-    >---C---+      |
-            ---A---+
-    >---C---+
+    """Return a constant operation connected with a large operation tree with 3 other constants and 3 additions.
+    ---C---+
+           ---A---+
+    ---C---+      |
+                  +---A
+    ---C---+      |
+           ---A---+
+    ---C---+
     """
     add_oper = Addition()
     add_oper_2 = Addition()
diff --git a/test/fixtures/port.py b/test/fixtures/port.py
new file mode 100644
index 0000000000000000000000000000000000000000..4019b3a2016aa418daeca771f9a2d8bcc4ca6652
--- /dev/null
+++ b/test/fixtures/port.py
@@ -0,0 +1,10 @@
+import pytest
+from b_asic.port import InputPort, OutputPort
+
+@pytest.fixture
+def input_port():
+    return InputPort(0, None)
+
+@pytest.fixture
+def output_port():
+    return OutputPort(0, None)
diff --git a/test/graph_id/test_graph_id_generator.py b/test/graph_id/test_graph_id_generator.py
deleted file mode 100644
index 85fb088d3409432e173a8b649c7eb3e4c191d423..0000000000000000000000000000000000000000
--- a/test/graph_id/test_graph_id_generator.py
+++ /dev/null
@@ -1,29 +0,0 @@
-"""
-B-ASIC test suite for graph id generator.
-"""
-
-from b_asic.graph_id import GraphIDGenerator, GraphID
-
-import pytest
-
-@pytest.fixture
-def graph_id_generator():
-    return GraphIDGenerator()
-
-def test_empty_string_generator(graph_id_generator):
-    """Test the graph id generator for an empty string type."""
-    assert graph_id_generator.get_next_id("") == "1"
-    assert graph_id_generator.get_next_id("") == "2"
-
-
-def test_normal_string_generator(graph_id_generator):
-    """"Test the graph id generator for a normal string type."""
-    assert graph_id_generator.get_next_id("add") == "add1"
-    assert graph_id_generator.get_next_id("add") == "add2"
-
-def test_different_strings_generator(graph_id_generator):
-    """Test the graph id generator for different strings."""
-    assert graph_id_generator.get_next_id("sub") == "sub1"
-    assert graph_id_generator.get_next_id("mul") == "mul1"
-    assert graph_id_generator.get_next_id("sub") == "sub2"
-    assert graph_id_generator.get_next_id("mul") == "mul2"
diff --git a/test/port/test_outputport.py b/test/port/test_outputport.py
deleted file mode 100644
index ac50818e105f97c094a02b7fb19592dc85e67e33..0000000000000000000000000000000000000000
--- a/test/port/test_outputport.py
+++ /dev/null
@@ -1,46 +0,0 @@
-"""
-B-ASIC test suite for OutputPort
-TODO: More info
-"""
-from b_asic import InputPort, OutputPort
-import pytest
-
-@pytest.fixture
-def inp_ports():
-    return [InputPort(_, None) for _ in range(0,3)]
-
-def test_connect_multiple_signals(inp_ports):
-    """Can multiple ports connect to an output port?"""
-    out_port = OutputPort(0, None)
-
-    for port in inp_ports:
-        out_port.connect(port)
-
-    assert out_port.signal_count() == len(inp_ports)
-
-def test_disconnect_multiple_signals(inp_ports):
-    """Can multiple signals disconnect from an output port?"""
-    out_port = OutputPort(0, None)
-
-    sigs = []
-
-    for port in inp_ports:
-        sigs.append(out_port.connect(port))
-
-    for sig in sigs:
-        out_port.remove_signal(sig)
-
-    assert out_port.signal_count() == 0
-
-def test_disconnect_mulitple_ports(inp_ports):
-    """Can multiple ports be disconnected from an output port?"""
-    out_port = OutputPort(0, None)
-
-    for port in inp_ports:
-        out_port.connect(port)
-
-    for port in inp_ports:
-        out_port.disconnect(port)
-
-    assert out_port.signal_count() == 3
-    assert len(out_port.connected_ports) == 0
\ No newline at end of file
diff --git a/test/signal_flow_graph/test_signal_flow_graph.py b/test/signal_flow_graph/test_signal_flow_graph.py
deleted file mode 100644
index d18d2da555df3cc01e62971dcc043fbd25567a22..0000000000000000000000000000000000000000
--- a/test/signal_flow_graph/test_signal_flow_graph.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from b_asic.signal_flow_graph import SFG
-from b_asic.core_operations import Addition, Constant
-from b_asic.signal import Signal
-from b_asic.signal_flow_graph import SFG
-
-import pytest
-
-def test_adding_to_sfg():
-    pass
-
diff --git a/test/core_operations/test_core_operations.py b/test/test_core_operations.py
similarity index 99%
rename from test/core_operations/test_core_operations.py
rename to test/test_core_operations.py
index 1d33bfe10fd27e59aaabf2f733c05178ee5507b1..b176b2a6506cc5a1297813f6ddcb6d3589492838 100644
--- a/test/core_operations/test_core_operations.py
+++ b/test/test_core_operations.py
@@ -3,8 +3,6 @@ B-ASIC test suite for the core operations.
 """
 
 from b_asic.core_operations import Constant, Addition, Subtraction, Multiplication, Division, SquareRoot, ComplexConjugate, Max, Min, Absolute, ConstantMultiplication, ConstantAddition, ConstantSubtraction, ConstantDivision
-from b_asic.signal import Signal
-import pytest
 
 # Constant tests.
 def test_constant():
diff --git a/test/test_graph_id_generator.py b/test/test_graph_id_generator.py
new file mode 100644
index 0000000000000000000000000000000000000000..b14597eabe6c15695c5c452f69f3deeab56e36d5
--- /dev/null
+++ b/test/test_graph_id_generator.py
@@ -0,0 +1,28 @@
+"""
+B-ASIC test suite for graph id generator.
+"""
+
+from b_asic.graph_id import GraphIDGenerator, GraphID
+import pytest
+
+@pytest.fixture
+def graph_id_generator():
+    return GraphIDGenerator()
+
+class TestGetNextId:
+    def test_empty_string_generator(self, graph_id_generator):
+        """Test the graph id generator for an empty string type."""
+        assert graph_id_generator.get_next_id("") == "1"
+        assert graph_id_generator.get_next_id("") == "2"
+
+    def test_normal_string_generator(self, graph_id_generator):
+        """"Test the graph id generator for a normal string type."""
+        assert graph_id_generator.get_next_id("add") == "add1"
+        assert graph_id_generator.get_next_id("add") == "add2"
+
+    def test_different_strings_generator(self, graph_id_generator):
+        """Test the graph id generator for different strings."""
+        assert graph_id_generator.get_next_id("sub") == "sub1"
+        assert graph_id_generator.get_next_id("mul") == "mul1"
+        assert graph_id_generator.get_next_id("sub") == "sub2"
+        assert graph_id_generator.get_next_id("mul") == "mul2"
diff --git a/test/port/test_inputport.py b/test/test_inputport.py
similarity index 100%
rename from test/port/test_inputport.py
rename to test/test_inputport.py
diff --git a/test/test_operation.py b/test/test_operation.py
new file mode 100644
index 0000000000000000000000000000000000000000..6c37e30bddd0b55ea69ae5b95a341c1ddeb56847
--- /dev/null
+++ b/test/test_operation.py
@@ -0,0 +1,31 @@
+from b_asic.core_operations import Constant, Addition
+from b_asic.signal import Signal
+from b_asic.port import InputPort, OutputPort
+
+import pytest
+
+class TestTraverse:
+    def test_traverse_single_tree(self, operation):
+        """Traverse a tree consisting of one operation."""
+        constant = Constant(None)
+        assert list(constant.traverse()) == [constant]
+
+    def test_traverse_tree(self, operation_tree):
+        """Traverse a basic addition tree with two constants."""
+        assert len(list(operation_tree.traverse())) == 3
+
+    def test_traverse_large_tree(self, large_operation_tree):
+        """Traverse a larger tree."""
+        assert len(list(large_operation_tree.traverse())) == 7
+
+    def test_traverse_type(self, large_operation_tree):
+        traverse = list(large_operation_tree.traverse())
+        assert len(list(filter(lambda type_: isinstance(type_, Addition), traverse))) == 3
+        assert len(list(filter(lambda type_: isinstance(type_, Constant), traverse))) == 4
+
+    def test_traverse_loop(self, operation_tree):
+        add_oper_signal = Signal()
+        operation_tree._output_ports[0].add_signal(add_oper_signal)
+        operation_tree._input_ports[0].remove_signal(add_oper_signal)
+        operation_tree._input_ports[0].add_signal(add_oper_signal)
+        assert len(list(operation_tree.traverse())) == 2
diff --git a/test/test_outputport.py b/test/test_outputport.py
new file mode 100644
index 0000000000000000000000000000000000000000..deed7a1e06836600254e3903b8b45a3d05f17cbe
--- /dev/null
+++ b/test/test_outputport.py
@@ -0,0 +1,80 @@
+"""
+B-ASIC test suite for OutputPort.
+"""
+from b_asic import OutputPort, InputPort, Signal
+import pytest
+
+@pytest.fixture
+def output_port():
+    return OutputPort(0, None)
+
+@pytest.fixture
+def input_port():
+    return InputPort(0, None)
+
+@pytest.fixture
+def list_of_input_ports():
+    return [InputPort(_, None) for _ in range(0,3)]
+
+class TestConnect:
+    def test_multiple_ports(self, output_port, list_of_input_ports):
+        """Can multiple ports connect to an output port?"""
+        for port in list_of_input_ports:
+            output_port.connect(port)
+
+        assert output_port.signal_count() == len(list_of_input_ports)
+
+    def test_same_port(self, output_port, list_of_input_ports):
+        """Check error handing."""
+        output_port.connect(list_of_input_ports[0])
+        with pytest.raises(AssertionError):
+            output_port.connect(list_of_input_ports[0])
+
+        assert output_port.signal_count() == 2
+
+class TestAddSignal:
+    def test_dangling(self, output_port):
+        s = Signal()
+        output_port.add_signal(s)
+
+        assert output_port.signal_count() == 1
+
+    def test_with_destination(self, output_port, input_port):
+        s = Signal(destination=input_port)
+        output_port.add_signal(s)
+
+        assert output_port.connected_ports == [s.destination]
+
+class TestDisconnect:
+    def test_multiple_ports(self, output_port, list_of_input_ports):
+        """Can multiple ports disconnect from OutputPort?"""
+        for port in list_of_input_ports:
+            output_port.connect(port)
+
+        for port in list_of_input_ports:
+            output_port.disconnect(port)
+
+        assert output_port.signal_count() == 3
+        assert output_port.connected_ports == []
+
+class TestRemoveSignal:
+    def test_one_signal(self, output_port, input_port):
+        s = output_port.connect(input_port)
+        output_port.remove_signal(s)
+
+        assert output_port.signal_count() == 0
+        assert output_port.signals == []
+        assert output_port.connected_ports == []
+
+    def test_multiple_signals(self, output_port, list_of_input_ports):
+        """Can multiple signals disconnect from OutputPort?"""
+        sigs = []
+
+        for port in list_of_input_ports:
+            sigs.append(output_port.connect(port))
+
+        for sig in sigs:
+            output_port.remove_signal(sig)
+
+        assert output_port.signal_count() == 0
+        assert output_port.signals == []
diff --git a/test/signal/test_signal.py b/test/test_signal.py
similarity index 100%
rename from test/signal/test_signal.py
rename to test/test_signal.py
diff --git a/test/traverse/test_traverse_tree.py b/test/traverse/test_traverse_tree.py
deleted file mode 100644
index 031aeec76eebacb1b54b21a53023326dcbefee08..0000000000000000000000000000000000000000
--- a/test/traverse/test_traverse_tree.py
+++ /dev/null
@@ -1,30 +0,0 @@
-from b_asic.core_operations import Constant, Addition
-from b_asic.signal import Signal
-from b_asic.port import InputPort, OutputPort
-
-import pytest
-
-def test_traverse_single_tree(operation):
-    """Traverse a tree consisting of one operation."""
-    constant = Constant(None)
-    assert list(constant.traverse()) == [constant]
-
-def test_traverse_tree(operation_tree):
-    """Traverse a basic addition tree with two constants."""
-    assert len(list(operation_tree.traverse())) == 3
-
-def test_traverse_large_tree(large_operation_tree):
-    """Traverse a larger tree."""
-    assert len(list(large_operation_tree.traverse())) == 7
-
-def test_traverse_type(large_operation_tree):
-    traverse = list(large_operation_tree.traverse())
-    assert len(list(filter(lambda type_: isinstance(type_, Addition), traverse))) == 3
-    assert len(list(filter(lambda type_: isinstance(type_, Constant), traverse))) == 4
-
-def test_traverse_loop(operation_tree):
-    add_oper_signal = Signal()
-    operation_tree._output_ports[0].add_signal(add_oper_signal)
-    operation_tree._input_ports[0].remove_signal(add_oper_signal)
-    operation_tree._input_ports[0].add_signal(add_oper_signal)
-    assert len(list(operation_tree.traverse())) == 2